【发布时间】:2019-02-21 03:24:06
【问题描述】:
我知道
var a = [12,23,132,12,3];
var [first, ...rest] = a;
会给first = 12和rest = [23,132,12,3]
我想做的是将rest 作为第一个变量。像这样的
var a = [12,23,132,12,3];
var [...rest, last] = a;
哪个应该给我rest = [12,23,132,12]和last = 3
但这是一个错误的语法,我会得到一个错误提示
SyntaxError: Rest element must be last element
我知道我可以通过反转数组然后像这样解构来实现这一点
var a = [12,23,132,12,3];
var [last, secondLast, ...rest] = a.reverse();
这将给我last = 3、secondLast = 12 和rest = [132,23,12],然后我将再次不得不reverse() 其余部分。
我也可以使用索引并直接访问数组元素。但这不是我们想要的。
我的问题是,有没有其他方法可以实现我想要做的事情(使用休息运算符?)?
【问题讨论】:
-
由于数组解构的设计,这是不可能的。它需要一个迭代器作为输入,并且您事先不知道迭代器将产生多少项,因此您不知道何时停止向数组推送并开始分配给最后一个目标。
-
嗯,很有可能:
let [last, secondLast, ...rest] = [...a.slice(-2).reverse(), ...a.slice(0, -2)] -
第一个例子不需要反向:
let [last, ...rest] = [...a.slice(-1), ...a.slice(0, -1)],而且都没有突变!
标签: javascript arrays ecmascript-6 variable-assignment destructuring