使用切片从数组中删除元素

时间:2012-08-07 14:48:20

标签: javascript

我正在尝试使用切片从我的数组中删除一个元素,但我无法让它工作,看看这段代码。

    console.log(this.activeEffects); // Prints my array
    console.log(this.activeEffects.slice(0,1)); // Remove from index 0, and remove one.
    console.log(this.activeEffects); // Prints array again, this time my element should be gone

结果是。

enter image description here

所以从这里得到的是,首先阵列是完整的,应该是它。然后它打印出切片的数组。最后第三个应该是空的?或?

7 个答案:

答案 0 :(得分:17)

我相信你正在寻找splice。来自W3 Schools:

  

splice()方法在数组中添加/删除项目,并返回已删除的项目。

看看该页面上的示例;用例类似于你想要实现的目标。

编辑:Alternative link to MDN,正如Nicosunshine所建议的那样;关于那里命令的更多信息。

答案 1 :(得分:8)

function removeItemWithSlice(index) {
  return [...items.slice(0, index), ...items.slice(index + 1)]
}

Slice将创建一个新数组。我们创建了两个数组:从开始到索引,从索引+ 1到结束。然后我们应用扩展运算符(...)来获取这些数组的项目并创建一个包含我们关注的所有项目的新单个数组。如果你不喜欢一个班轮,我会贴上相同的方法:

function removeItemWithSlice(index) {
  const firstArr = items.slice(0, index);
  const secondArr = items.slice(index + 1);
  return [...firstArr , ...secondArr]
}

答案 2 :(得分:7)

.slice不会改变数组,您可以使用.splice()删除数组中索引为i的项目:

this.activeEffects.splice(i, 1)

答案 3 :(得分:5)

这是我能够提出的:

route.navigate

答案 4 :(得分:3)

a.slice(0, index).concat(a.slice(index + 1))

答案 5 :(得分:1)

Array.prototype.slice() ...

  

不会改变原始数组,但会返回一个新的“一级”   深度“复制,包含从中切出的元素的副本   原始数组。原始数组的元素将复制到新元素中   数组如下:

Array.prototype.splice() ...

  

更改数组的内容,在删除旧元素时添加新元素。

这个例子应该说明不同之处。

// sample array
var list = ["a","b","c","d"];
// slice returns a new array
console.log("copied items: %o", list.slice(2));
// but leaves list itself unchanged
console.log("list: %o", list);
// splice modifies the array and returns a list of the removed items
console.log("removed items: %o", list.splice(2));
// list has changed
console.log("list: %o", list);

答案 6 :(得分:-1)

看这里: http://www.w3schools.com/jsref/jsref_slice_array.asp

你可以看到slice方法选择对象并将它们抛出到一个新的数组对象中^^所以你不能删除这样的对象,可能你可以尝试这样的事情:

var a = ["a","b","c"]; (pseudo code)
/* I wan't to remove the "b" object */

var result = a.slice(0,1)+a.slice(2,1); /* If you considers that "+" is a concatenation operator, i don't remember if it is true... */