我有一个对象数组,我正在根据对象值删除元素,而不知道它是哪个元素。
所以...那些可爱的人将我的问题标记为重复并建议我阅读 How do I remove a particular element from an array in JavaScript?没有帮助。
我的问题...再次...
我有一个对象数组
我想从数组中搜索并删除特定元素。我有一个冗长的解决方案(循环遍历数组一次,创建元素 id 列表,然后在另一个循环中逐个切片)。我希望有另一种方法(也增强我的技能)。
myarray.filter(function(item) { if( item.flag==="Y" ) { // how to delete element from myarray // delete implies remove it from myarray } });
感谢所有帮助 =)
最佳答案
您至少有两个选择:
使用过滤器
创建一个新数组
第一个方法是创建一个仅包含所需条目的新数组。使用filter
,您已经走在正确的轨道上:
myArray = myArray.filter(function(item) {
return item.flag !== "Y";
});
新数组将仅包含回调返回真值的条目。在这种情况下,只有 flag
为 !== "Y"
的。 flag
为 === "Y"
的条目将被排除在外。
请注意,如果您在其他变量中有对同一数组的其他引用,它们将继续指向旧数组。只有 myArray
(上面)获取对 new 数组的引用。
使用splice
和循环修改现有数组
第二种是使用 while
循环和 splice
:
var n = 0;
while (n < myArray.length) {
if (myArray[n].flag === "Y") {
// Remove it
myArray.splice(n, 1);
} else {
// Move to next
++n;
}
}
请注意,如果删除一个,我们不会移动到下一个,因为我们需要测试它后面的一个(现在位于前一个索引)。
或者如 Nina在评论中指出,for
循环向后:
for (var n = myArray.length - 1; n >= 0; --n) {
if (myArray[n].flag === "Y") {
// Remove it
myArray.splice(n, 1);
}
}
在这种情况下,由于我们正在修改数组(而不是创建新数组),因此通过对同一数组的任何引用都可以看到更改,而不仅仅是 myArray
。 (因为它们都指向同一个对象,我们修改了该对象的状态。)
关于javascript - 如何删除javascript数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36476157/