JavaScript ES6:将数组拆分为剩余部分,最后进行解构

Ale*_*lex 3 javascript arrays destructuring ecmascript-6

我刚刚发现了令人愉快的 ES6 列表解构语法,即

ls = [1, 2, 3]

[first, ...rest] = ls
Run Code Online (Sandbox Code Playgroud)

这台first1rest[2,3]。但是,是否可以将列表拆分为rest=[1,2]last=3使用类似的语法?

我没有任何运气谷歌搜索它。我对这样的语法尝试了一些明显的猜测(见下文),但它们都产生了语法错误。

[rest..., last] = ls
[...rest, last] = ls
Run Code Online (Sandbox Code Playgroud)

我想我可以通过两次反转列表来做到这一点,所以我的问题的另一种解决方案是恒定时间列表反转功能。

小智 9

通常所说的“数组解构”实际上是解构一个可迭代对象,其中数组是一个特例。关于可迭代的事情是它们可以是无限的,或者是“懒惰的”。这就是你不能解构成任意数量的元素,然后是最后一个元素的原因:

const [...first, last] = integers();
Run Code Online (Sandbox Code Playgroud)

因为integers可能

function* integers() {
  let n = 0;
  while (true) yield n++;
}
Run Code Online (Sandbox Code Playgroud)

然后会last是什么?