22

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

    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

结果就是这样。

在此处输入图像描述

所以从中得到的是,起初数组是完整的,它应该是。然后它打印从数组中切片的内容。最后第三个应该是空的?或者?

4

7 回答 7

39
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]
}
于 2017-12-10T21:40:45.777 回答
30

我相信你正在寻找splice. 来自W3 学校:

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

看看那个页面上的例子;那里的用例与您想要实现的相似。

编辑:由 Nicosunshine 建议的MDN 的替代链接;有关该命令的更多信息。

于 2012-08-07T14:51:53.467 回答
12
a.slice(0, index).concat(a.slice(index + 1))
于 2018-04-19T14:59:51.373 回答
7

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

this.activeEffects.splice(i, 1)
于 2012-08-07T14:50:43.790 回答
5

这是我能够想出的:

var newArray = oldArray.slice(indexOfElementToRemove+1).concat(oldArray.slice(0,indexOfElementToRemove));
于 2016-12-17T22:08:37.657 回答
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);

于 2012-08-07T14:54:07.657 回答
-1

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

你可以看到切片方法选择对象然后把它们扔到一个新的数组对象中^^所以你不能像这样删除一个对象,也许你可以尝试这样的事情:

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... */
于 2012-08-07T14:54:08.643 回答