James Browning (2017-08-03T04:44:42.000Z)
thejamesernator at gmail.com (2017-08-03T04:46:09.642Z)
I still think it's silly that `[...rest, last]` isn't allowed, the point that it's "iterable destructuring" is actually irrelevant as if there's a spread it's always coerced to an array e.g.: ``` function* nums() { yield 1 yield 2 yield 3 yield 4 } const [first, ...rest] = nums() Array.isArray(rest) // true, it's not an iterator for the rest of the nums, // it's just an Array of [2,3,4] ``` Given the above, it should really just be the case that `[...rest, last]` would just be the same as destructuring the reversed array, then re-reversing the rest part e.g.: ``` const [...rest, secondLast, last] = someIterable // Would be equivalent to const __arr = Array.from(someIterable).reverse() const [last, secondLast, ...rest] = __arr rest.reverse() // Reverse it back to correct order ``` --- Really the only contentious case is if it's in the middle because then you have to decide which direction to consume from e.g. ``` const [a, ...rest, c] = [1] // Possible values for a, c // 1, 1 // 1, undefined // undefined, 1 ``` Personally I'd be quite happy to *at least* get the `[...rest, last]` case even if the middle case couldn't be agreed upon, but someone in tc39 would need to champion it.