解构语法数组项和余数

时间:2019-06-14 16:04:34

标签: javascript arrays ecmascript-6 destructuring

我正在尝试掌握解构赋值语法以完成以下任务:

我有一个项目数组,例如const arr = ['a','b','c'],我想映射到另一个数组数组,其中每个项目都是从初始数组(即[['b','c'],['a','c'],['a','b']])中挑选项目的剩余部分。 >

为此,我正在尝试

arr.map((_,i) => ([arr[i],...rest] = arr, rest))

然后返回

[['b', 'c'],['a', 'c'],['a', 'a']]

显然不是我需要的。我猜这是因为arr本身在此过程中发生了某种突变。

我知道,我可以使用一些splice()或其他东西,但是我试图弄清楚如何使其正常工作。

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

您可以直接对数组进行解构并在实际索引处删除该项目。

var array = ['a', 'b', 'c'],
    result = array.map((_, i, { [i]: __, ...a }) => Object.values(a));

console.log(result); // ab ac bc

答案 1 :(得分:2)

问题是您的代码将始终从数组中删除第一个元素。您可以将数组转换为对象,然后使用方括号[]指定要删除的索引。然后返回对象的值。

let arr = ['a','b','c'];

const res = arr.map((_,i) => {
  let {[i]:removed,...rest} = Object.assign({},arr);
  return Object.values(rest)
})
console.log(res)