Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用slice从数组中删除元素_Javascript - Fatal编程技术网

Javascript 使用slice从数组中删除元素

Javascript 使用slice从数组中删除元素,javascript,Javascript,我试图使用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 tim

我试图使用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
其结果是


因此,从中得到的是,首先,数组是完整的,它应该是完整的。然后它将打印阵列的切片。最后第三个应该是空的?或者?

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

this.activeEffects.splice(i, 1)

我相信您正在寻找
拼接
。从

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

看看那一页上的例子;那里的用例与您想要实现的类似

编辑:,如Nicosunshine所建议;有关该命令的更多信息。

Array.prototype。

不更改原始数组,但返回新的“一级” “深度”副本,其中包含从 原始数组。原始数组的元素将复制到新数组中 数组如下所示:

Array.prototype.

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

这个例子应该说明这一区别

//示例数组
风险值列表=[“a”、“b”、“c”、“d”];
//slice返回一个新数组
log(“复制的项目:%o”,list.slice(2));
//但列表本身保持不变
日志(“列表:%o”,列表);
//splice修改数组并返回已删除项的列表
console.log(“删除的项目:%o”,列表拼接(2));
//列表已更改
日志(“列表:%o”,列表)请看这里:

您可以看到,slice方法select object et将它们放入一个新的数组对象^^^,因此您不能删除这样的对象,可能您可以尝试这样的操作:

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... */

这就是我能想到的:

var newArray = oldArray.slice(indexOfElementToRemove+1).concat(oldArray.slice(0,indexOfElementToRemove));
Slice将创建一个新数组。我们创建两个数组:从begging到index,从index+1到end。然后,我们应用扩展运算符(…)获取这些数组的项,并创建一个包含所有我们关心的项的新单个数组。如果你不喜欢一行,我会用同样的方式粘贴:

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

有可能为此制作JSFIDLE?您确定这是一个数组吗?但是我可能需要删除数组中间的元素iarray@MartinElvarJensen对,我没意识到
shift()
当您希望从一开始就删除时更可取。slice不会像他所说的那样更改原始数组,但会返回删除的元素。那么,为什么不通过赋值将原始数组替换为已删除的元素呢?e、 g.this.activeEffects=this.activeEffects.slice(0,1)@Magrangs您需要反转它。类似于:
this.activeEffects=this.activeEffects.slice(1)
它生成一个新数组,其中包含除第一个之外的所有项。但是如果有其他对旧阵列的引用,它们将不会被更新。我知道我可能听起来很烦人,但不要使用W3学校。MDN这是一个更好的资源谢谢TSL,这解决了我的问题。现在就拍我自己。@NICOSUNNE向Meta请求自动阻止w3schools链接@佳能我不知道它是否会飞起来,但你总是可以在所有堆栈溢出中发送垃圾邮件:p OP要求切片。如果您不想改变值,那么使用slice是有原因的。这会改变数组的顺序,而不是在OP中抛出代码段,最好给出一些额外的解释,例如,为什么他们的解决方案不起作用,您的解决方案如何起作用,也许还可以链接到有关所用函数的其他文档。@kingdaro我的想法是针对一个强大的开发人员的。从技术上讲,这是正确的答案-是的,您可能想使用splice:-)这应该是公认的答案,因为它解决了字面上的问题。当涉及到突变时,剪接和切片的行为并不相同。
function removeItemWithSlice(index) {
  const firstArr = items.slice(0, index);
  const secondArr = items.slice(index + 1);
  return [...firstArr , ...secondArr]
}
a.slice(0, index).concat(a.slice(index + 1))