
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));
for (const i of range(10, 25, 5))
console.log(i);
console.log(range(5).reduce((accumulator, current) => accumulator + current));
enumerate
import {enumerate} from 'pythonic';
const arr = ['a', 'b'];
for (const [index, value] of enumerate(arr))
console.log(`index: ${index}, value: ${value}`);
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}`);
for (const [first, second] of zipLongest(arr1, arr2))
console.log(`first: ${first}, second: ${second}`);
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}`);
const map = new Map([[1, 'one'], [2, 'two']]);
for (const [key, value] of items(map))
console.log(`key: ${key}, value: ${value}`);
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);
console.log(randomNumbers.some(value => value > 10));
console.log(randomNumbers.every(value => value < 1000));
License
MIT