我有一个对象数组,我正在根据对象值删除元素,而不知道它是哪个元素。
所以...那些将我的问题标记为重复并建议我阅读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
}
});
所有帮助赞赏=)
答案 0 :(得分:1)
您至少有两个选择:
filter
第一种是创建一个只包含所需条目的新数组。您已使用filter
:
myArray = myArray.filter(function(item) {
return item.flag !== "Y";
});
新数组将只有回调返回truthy值的条目。在这种情况下,只有flag
为!== "Y"
的人。 <{1}}为flag
的参赛作品将被排除在外。
请注意,如果您在其他变量中对此相同数组有其他引用,则它们将继续指向旧数组。只有=== "Y"
(在上面)才能获得对新数组的引用。
myArray
和循环第二种方法是使用splice
循环和while
:
splice
请注意,如果我们删除一个,我们就不会移动到下一个,因为我们需要在它之后测试一个(现在在前一个索引处)。
或者Nina在评论中指出,var n = 0;
while (n < myArray.length) {
if (myArray[n].flag === "Y") {
// Remove it
myArray.splice(n, 1);
} else {
// Move to next
++n;
}
}
循环向后:
for
在这种情况下,由于我们正在修改数组(而不是创建新数组),因此通过对同一数组的任何引用都可以看到更改,而不仅仅是for (var n = myArray.length - 1; n >= 0; --n) {
if (myArray[n].flag === "Y") {
// Remove it
myArray.splice(n, 1);
}
}
。 (因为它们都指向同一个对象,我们修改了它的状态。)
答案 1 :(得分:0)
按照属性值删除数组中的对象
删除价值:30:
arr.splice(arr.map(el => el.value).indexOf(30), 1);
DEMO
删除姓名:“John”:
arr.splice(arr.map(el => el.name).indexOf("John"), 1);