如何删除javascript数组元素?

时间:2016-04-07 12:26:09

标签: javascript arrays

我有一个对象数组,我正在根据对象值删除元素,而不知道它是哪个元素。

所以...那些将我的问题标记为重复并建议我阅读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
        }
    });
    

所有帮助赞赏=)

2 个答案:

答案 0 :(得分:1)

您至少有两个选择:

使用filter

创建 new 数组

第一种是创建一个只包含所需条目的新数组。您已使用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);