Skip to content

Python like utility functions for JavaScript: range, enumerate, zip and items.

License

Notifications You must be signed in to change notification settings

keyvan-m-sadeghi/pythonic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

npm version Build Status

Pythonic

Python like utility functions for JavaScript: range, enumerate, items, zip and zipLongest.

These functions return an Iterator instance similar to Python Iterators. This Iterator implementation is lazy evaluated, offers map, filter, reduce, some, every and Symbol.asyncIterator interfaces.

Install

npm install pythonic --save

Functions

range

import {range} from 'pythonic';

range(3).map(x => console.log(x + 1));
// 1
// 2
// 3

for (const i of range(10, 25, 5))
    console.log(i);
// 10
// 15
// 20

console.log(range(5).reduce((accumulator, current) => accumulator + current));
// 10

enumerate

import {enumerate} from 'pythonic';

const arr = ['a', 'b'];
for (const [index, value] of enumerate(arr))
    console.log(`index: ${index}, value: ${value}`);
// index: 0, value: a
// index: 1, value: b

zip | zipLongest

import {zip, zipLongest} from 'pythonic';

const arr1 = ['a', 'b'];
const arr2 = ['c', 'd', 'e'];
for (const [first, second] of zip(arr1, arr2))
    console.log(`first: ${first}, second: ${second}`);
// first: a, second: c
// first: b, second: d

for (const [first, second] of zipLongest(arr1, arr2))
    console.log(`first: ${first}, second: ${second}`);
// first: a, second: c
// first: b, second: d
// first: undefined, second: e

// unzip
const [arrayFirst, arraySecond] = [...zip(...zip(arr1, arr2))];

items

import {items} from 'pythonic';

const obj = {a: 'aa', b: 'bb'};
for (const [key, value] of items(obj))
    console.log(`key: ${key}, value: ${value}`);
// key: a, value: aa
// key: b, value: bb

const map = new Map([[1, 'one'], [2, 'two']]);
for (const [key, value] of items(map))
    console.log(`key: ${key}, value: ${value}`);
// key: 1, value: one
// key: 2, value: two

Iterator

import {Iterator, range} from 'pythonic';

const randomIntegers = (size, start, stop) => new Iterator(function * () {
    for (const _ of range(size))
        yield Math.floor(Math.random() * (stop - start) + start);
});

const randomNumbers = randomIntegers(3, 10, 1000);

for (const randomNumber of randomNumbers)
    console.log(randomNumber);
// 685
// 214
// 202

console.log(randomNumbers.some(value => value > 10));
// true
console.log(randomNumbers.every(value => value < 1000));
// true

License

MIT

About

Python like utility functions for JavaScript: range, enumerate, zip and items.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published