javascript - 如何删除javascript数组元素?

标签 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
        }
    });
    

感谢所有帮助 =)

最佳答案

您至少有两个选择:

使用过滤器创建一个数组

第一个方法是创建一个仅包含所需条目的新数组。使用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/

相关文章:

javascript - 将 Javascript 代码重写为 jQuery

java - 比较特定索引时数组循环不起作用

javascript - 使用键值组合数组中的对象值

javascript - 如何为按钮设置图像和为图像设置悬停效果

javascript - 安卓浏览器 : touchcancel being fired althought touchmove has preventDefault

javascript - 如何使用 Bluebird 解决一组 promise 和值(value)观

vb.net - 将常量数组传递给 VB.NET 中的函数

javascript - NodeJS JSON 错误

PHP数组输出困惑

javascript - 从对象中获取值