for statement with index and value

Tab Atkins Jr. jackalmage at
Tue Jul 14 20:15:49 UTC 2015

On Mon, Jul 13, 2015 at 7:13 PM, Tingan Ho <tingan87 at> wrote:
> Just following a discussion we had on TypeScript
> In most times, I just need the value in an array, so I use a for..of loop.
> But then, I find out that I need the index too, then I need to rewrite my
> whole for loop expression. Happens all the time for me.
> I have to ask why there doesn't exist a `for statement` where I can get the
> index and value of an array directly? Or for that matter property and value
> of an object?
> `.forEach` is not ideal since you can't break, break to outer loop and
> continue cleanly. Even though you can achieve this with other array methods,
> I don't think they are as productive as a for-statement.
> What I'm suggesting is augmenting the current syntax for `for..of` loops.
> And support an overloading pattern so that we don't need to rewrite the
> whole for loop expression to just to get the index when we already getting
> the value.
> ```
> // overloads
> for (let value, index of values) { ... }
> for (let value of values) { ... }
> ```
> PS. Sorry if this has already discussed. Couldn't find any on Google and the
> page doesn't have any search capabilities.

Kevin provided the built-in answer for arrays, but for arbitrary
iterables, the Python solution is trivial:

function* enumerate(iter) {
  let i = 0;
  for(let value of iter) {
    yield [i, value];

for(let [i, v] of enumerate(values)) {

I expect there's already libraries that duplicate all of Python's
itertools and more; the iterator algebra is really trivially hackable.


More information about the es-discuss mailing list