What is the ES6 equivalent of Python 'enumerate' for a sequence?
Yes there is, check out Array.prototype.entries()
.
const foobar = ['A', 'B', 'C'];for (const [index, element] of foobar.entries()) { console.log(index, element);}
Array.prototype.map
Array.prototype.map
already gives you the index as the second argument to the callback procedure... And it's supported almost everywhere.
['a','b'].map(function(element, index) { return index + ':' + element; });//=> ["0:a", "1:b"]
I like ES6 too
['a','b'].map((e,i) => `${i}:${e}`)//=> ["0:a", "1:b"]
make it lazy
However, python's enumerate
is lazy and so we should model that characteristic as well -
function* enumerate (it, start = 0){ let i = start for (const x of it) yield [i++, x]}for (const [i, x] of enumerate("abcd")) console.log(i, x)
0 a1 b2 c3 d
Specifying the second argument, start
, allows the caller to control the transform of the index -
for (const [i, x] of enumerate("abcd", 100)) console.log(i, x)
100 a101 b102 c103 d
let array = [1, 3, 5];for (let [index, value] of array.entries()) console.log(index + '=' + value);