Hi,
One (minor) annoyance with forEach/map, etc. is that the enumeration
"can't" be stopped until all elements have been traversed which doesn't
suit every use case. One hack to stop the enumeration is to throw an
error but that requires to wrap the .forEach call in a try/catch block
which is annoying too for code readability.
The iterator protocol defines the StopIteration value. What about
reusing this value in the context of array extras?
(function(){
[2, 8, 7].forEach(function(e){
if(e === 8)
throw StopIteration;
console.log(e)
})
console.log('yo')
})();
In that case, '2' would be logged, then 'yo'. The idea is to have an
in-function way to stop the iteration without being forced to throw
something that has to be caught outside.
On the spec, for forEach, it would require to change step 7.c.ii.
Probably looking at the completion value and if it's throw with a value
of brand StopIteration, then don't forward the error and just stop the
iteration.
For methods that return something, I guess the partially built
array/value could be returned.
StopIteration is in Firefox (and that's not how it behaves with
forEach&co) but in no other engine as far as I know, so it's not
supposed to be part of the web, so I don't think there is a major issue
preventing this change.
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss