Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript ES6:将数组拆分为rest和last,并进行分解_Javascript_Arrays_Ecmascript 6_Destructuring - Fatal编程技术网

JavaScript ES6:将数组拆分为rest和last,并进行分解

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 我想我可以通过将列表反转两次来实现这一点,因此我的问题的另一个解决方案是使用常量时间

我刚刚发现了列表的ES6解构语法

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,而是严格地填充数组。