JavaScript如何从数组中删除元素而不改变原始数组?

20

我想知道是否有一种方法可以在不完全复制数组并对复制进行splice的情况下完成此操作。

var arr = [{id:1, name:'name'},{id:2, name:'name'},{id:3, name:'name'}];

我需要按其索引临时删除元素,并使用不包含此元素的数组,但我不想更改原始数组。

您可以提供使用lodash的方法。

我需要根据索引暂时移除一个元素,并使用不包含该元素的数组,但我不希望更改原始数组。您可以提供使用lodash的方法。


8
查看“slice”方法 :) - Hacketo
4个回答

33

Array.prototype.filter会创建并返回一个由符合条件的元素组成的新数组。

function removeByIndex(array, index) {
  return array.filter(function (el, i) {
    return index !== i;
  });
}

使用ECMAScript 6甚至更短:

var removeByIndex = (array, index) => array.filter((_, i) => i !== index);

这不会改变原始内容吗? - Bazinga
@anguLaravel,不会改变原始数组。 - c.P.u1

4

你应该指出 .splice() 返回被删除的元素,而不是没有该索引处项目的新数组。 - dwu39

1

对我来说,使用扩展运算符似乎是更好的选择,可以在不改变数组的情况下删除一个数组元素:

let fruits = ['peach', 'pear', 'apple', 'plum'];
let result = [...fruits.slice(0, 2), ...fruits.slice(3)];

console.log(fruits); // ['peach', 'pear', 'apple', 'plum']
console.log(result); // ['peach', 'pear', 'plum']

源代码


0
var arr = [{id:1, name:'name'},{id:2, name:'name'},{id:3, name:'name'}];
var index = 1;
var result = Array.prototype.concat(arr.slice(0, index), arr.slice(index + 1, arr.length));

它将数组的左右部分合并,分隔符是您想要删除的元素。


你也可以在这里使用spread运算符,而不是使用concat方法。 var result = [...arr.slice(1)] - Raul Špilev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接