从数组中删除元素(拼接)

时间:2016-09-29 17:46:31

标签: javascript arrays element splice

关于.splice()方法的基本问题,以及如何最好地从数组中删除元素。

我想使用.splice()从数组中删除项目,但是当我这样做时,我想让原始数组减去返回已删除的元素。 .splice()会返回已删除的元素

var arr = [1, 2, 3, 4, 5, 6, 7]
var newArr = arr.splice(3, 1)

console.log(newArr) // [4]

// whereas I want [1, 2, 3, 5, 6, 7]

最好,最有说服力的方法是什么?

2 个答案:

答案 0 :(得分:6)

使用点差运算符,您可以执行以下操作:

var arr = [1,2,3,4,5,6],
    indexToRemove = 3,
    newArr = [
      ...arr.slice(0,indexToRemove),
      ...arr.slice(indexToRemove+1)
    ]

或者,如果您想使用ES5,它可能类似于:

var arr = [1,2,3,4,5,6],
    indexToRemove = 3,
    newArr = [].concat(arr.slice(0,indexToRemove)).concat(arr.slice(indexToRemove+1))

答案 1 :(得分:4)

.splice 将数组置换并返回已删除的元素。因此,除非你实际上需要一个返回数组本身的函数,否则只需访问arr

var arr = [1, 2, 3, 4, 5, 6, 7]
arr.splice(3, 1)
console.log(arr) //  [1, 2, 3, 5, 6, 7]

您可以创建一个执行拼接并返回数组的包装函数:

function remove(arr, index) {
  arr.splice(index, 1)
  return arr;
}

var newArr = remove(arr, 3);
// Note: `newArr` is not a new array, it has the same value as `arr`

如果你想创建一个新数组而不改变原始数组,你可以使用.filter

var newArr = arr.filter(function(element, index) {
  return index !== 3;
}); // [1, 2, 3, 5, 6, 7]
arr; // [1, 2, 3, 4, 5, 6, 7]