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.
npm install pythonic --saveimport {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));
// 10import {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: bimport {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))];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: twoimport {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