javascript - 在通过数组解构赋值时先制作 ...rest 项

标签 javascript arrays ecmascript-6 variable-assignment destructuring

<分区>

我知道

var a = [12,23,132,12,3];
var [first, ...rest] = a;

将给出 first = 12rest = [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 = 3secondLast = 12rest = [132,23,12] 然后我会再次必须 reverse() 剩下的。

我还可以使用索引并直接访问数组元素。但这是不希望的。

我的问题是,是否有任何其他方法可以实现我想要做的事情(使用剩余运算符?)?

最佳答案

您可以使用 Destructuring assignment Array#pop() method 获取变量中的 last 元素和 rest:

let [last, ...rest] = [a.pop(), ...a];

您可以 test the results here并看到 pop() 是最快的解决方案。

注意:

如果我们想保持原数组不变,只需要添加被移除的项

a.push(last);
  • .pop() 调用将从 array 中获取 last 元素,并且 影响原始的 array 所以只有它的 rest。那 完全符合您的需求。
  • 我们使用 a.push(last); 来检索 a 数组的初始状态,这将避免克隆数组或使用额外的变量来克隆 code>一个数组。

演示:

var a = [12, 23, 132, 12, 3];

let [last, ...rest] = [a.pop(), ...a];

a.push(last);

console.log(last);
console.log(rest);
console.log(a);

关于javascript - 在通过数组解构赋值时先制作 ...rest 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52363733/

相关文章:

javascript - jQuery 一次执行多个操作

javascript - 在 JavaScript 中将 2 个数组相乘

python - 根据不同大小的数组 Y 的条件屏蔽数组 X

Javascript:找出数组中是否至少有两个不同的值

javascript - Nunjucks 模板中的变量解构

reactjs - 在React ES6中,为什么输入字段在输入字符后失去焦点?

javascript - 不懂export javascript ES6

javascript - 从 Outlook Office REST API 获取联系人计数 - Javascript

javascript - 如何处理空洞的 promise

javascript - 将函数传递给 React 中的组件