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