Description
Is your feature request related to a problem? Please describe.
Today, {#each}
only works over Array
and Array
-like objects (i.e. that have a numeric length
property). However, ES2015 introduces iterables using the built-in Symbol.iterator
. To use {#each}
with an iterable you have to remember to convert it to an Array
first, such as {#each [...myIterable] as item}
. (This conversion probably does more work too, but I’m more concerned with developer ergonomics than performance or overhead.)
#894 muddies the water because Object
properties aren’t iterable. As that issue concludes, the proper way to iterate over properties is by getting an iterable from Object.keys()
or the newer Object.entries()
.
#3225 illustrates the problem of having to sniff out the type of iterable before looping over it. Set
is not Array
-like by design but is iterable.
Describe the solution you'd like
I’d expect {#each}
to work with any iterable. Array
would work as it does today because Array
instances are iterable. Duck typed Array
-like objects would be the outlier. However, converting an Array
-like object to an iterable is trivial and could happen under-the-covers.
Describe alternatives you've considered
{#each [...myIterable] as item}
works, but it’s an extra conversion to remember. Iterators were designed just for this purpose.
How important is this feature to you?
In the grand scheme of things, not super important, but one of those things you bump up against periodically.
Additional context
Here a reproduction.