我一直在看Dan Abramov avoiding-array-mutations上关于redux的视频,并且我已经弄清楚了如何使用slice通过id从数组中删除元素,并返回不带突变的新数组。

var arrayOld = ['apple', 'orange', 'fig']
var index = arrayOld.indexOf('orange')
var arrayNew = arrayOld.slice(0,index).concat(arrayOld.slice(index + 1))
// ['apple', 'fig']

我想知道如何使用es6 spread语法做同样的事情?

我也想知道为什么没有更简单的方法:例如es6中的一个辅助函数可以执行此操作,其功能与concat方法一样简单,您只需传入要删除的元素的id即可返回新数组,因此基本上是拼接但没有突变。

最佳答案

正如@thefourtheye已经提到的,最好将.filter用于您的示例。

但是,如果要使用扩展运算符按索引删除元素,则可以执行以下操作:


let arrayOld = ['apple', 'orange', 'fig']
let index = 1;
let arrayNew = [...arrayOld.slice(0, index), ...arrayOld.slice(index + 1)];
console.log(arrayOld);
console.log(arrayNew);

10-05 23:57