Js从数组中删除元素而不更改原始元素

时间:2014-12-10 08:51:04

标签: javascript arrays

我想知道是否有办法在不制作数组的完整副本的情况下执行此操作,然后拼接副本。

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

我需要通过索引临时删除元素并使用没有此元素的数组,但我不想更改原始数组。

你甚至可以用lodash给我路。

4 个答案:

答案 0 :(得分:12)

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);

答案 1 :(得分:0)

您可以使用es6 spread operatorArray.prototype.splice

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

let newArr = [...arr]
newArr.splice(index)

spread运算符复制数组并拼接changes the contents of an array by removing or replacing existing elements and/or adding new elements

答案 2 :(得分: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));

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

答案 3 :(得分:0)

在我看来,使用散布运算符似乎是删除不带突变的数组元素的更好选择:

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']

Source