JavaScript ES6:将数组拆分为rest和last,并进行分解
我刚刚发现了列表的ES6解构语法JavaScript ES6:将数组拆分为rest和last,并进行分解,javascript,arrays,ecmascript-6,destructuring,Javascript,Arrays,Ecmascript 6,Destructuring,我刚刚发现了列表的ES6解构语法 ls = [1, 2, 3] [first, ...rest] = ls 它将first设置为1,将rest设置为[2,3]。但是,是否可以使用类似的语法将列表拆分为rest=[1,2]和last=3 我在谷歌上搜索它时运气不好。我对这种语法做了一些明显的猜测(见下文),但都产生了语法错误 [rest..., last] = ls [...rest, last] = ls 我想我可以通过将列表反转两次来实现这一点,因此我的问题的另一个解决方案是使用常量时间
ls = [1, 2, 3]
[first, ...rest] = ls
它将first
设置为1
,将rest
设置为[2,3]
。但是,是否可以使用类似的语法将列表拆分为rest=[1,2]
和last=3
我在谷歌上搜索它时运气不好。我对这种语法做了一些明显的猜测(见下文),但都产生了语法错误
[rest..., last] = ls
[...rest, last] = ls
我想我可以通过将列表反转两次来实现这一点,因此我的问题的另一个解决方案是使用常量时间列表反转函数。不,这只适用于尾部数组元素。所以,正如您所说,实现您想要的目标的方法是首先反转阵列 为了防止您遇到对象的类似模式,有一个:
const {a, ...rest} = {a: "prop1", b: "prop2", c: "prop3"}
尝试所有这些新功能的一个很好的工具是通常所说的“数组解构”实际上是解构一个iterable,其中数组是一个特例。iterables的特点是它们可以是无限的,或者说是“懒惰的”。这就是为什么不能将结构分解为任意数量的元素,然后是最后一个元素:
const [...first, last] = integers();
因为整数可以是
function* integers() {
let n = 0;
while (true) yield n++;
}
然后最后一个是什么?…rest
表示剩余值。因为你们在第一个参数中使用它,它会在那个里赋值。一种简单的实现方法是var rest=ls.slice(0);var last=rest.pop()
除最后一个元素外,所有元素通常被称为init
,顺便说一句。对了,但是为什么不支持它呢?它应该从一开始就被称为iterable destructuring。很好的解释!在阵列模式之后,固定数量的分配目标在理论上没有问题。请注意,即使使用rest模式,无限iterable也不会终止解构,因为它不会使用iterable惰性地初始化rest,而是严格地填充数组。