Long-time mostly-lurker on here. I deeply appreciate all the hard work that folks here put into JS.
I've run into a couple cases now where it'd be convenient to use a rest operator at the beginning or middle of an array destructuring, as in: ``` const [...xs, y] = someArray; ``` Or, similarly, in function signatures: ``` function(...xs, y) { } ``` The semantics would be simple: exhaust the iterable to create the array of `xs`, like a standard rest operator would do, but then slice off the last item and put it in `y`. For example, I was working with some variable argument functions that, in FP style, always take their data last. So I had a function like this: ``` function match(...matchersAndData) { const matchers = matchersAndData.slice(0, -1); const data = matchersAndData[matchersAndData.length - 1]; // do matching against data } ``` Under this proposal, the above could be rewritten: ``` function reduce(...matchers, data) { /* ... */ } ``` Another example: a function `pad`, which takes a target length and a string to pad, with an optional padding character argument in between: ``` function pad(targetLength, ...paddingCharAndOrData) { const [paddingChar = " "] = paddingCharAndOrData.slice(0, -1); const data = paddingCharAndOrData[paddingCharAndOrData.length - 1]; // pad data with paddingChar to targetLength; } ``` With this proposal, that could be rewritten: ``` function pad(targetLength, ...opts, data) { const [paddingChar = " "] = opts; // pad data with paddingChar to targetLength; } ``` I'm curious if this has been considered before, and what people think of the idea. Obviously, if `...a` appeared at the beginning or middle of a list, there would have to be a fixed number of items following it, so a subsequent rest operator in the same list would not be allowed. Thanks
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss