从数组中删除一个对象?

4

可能是重复问题:
JavaScript数组删除元素

所以,在javascript中,我有这样的设置:

global.menu = [{
   name: item1,
   price: price1,
   message: message1
},
{
   name: item2,
   price: price2,
   message: message2
},
{
   name: item3,
   price: price3,
   message: message3
}];

我的问题很简单,如何从这个数组中删除一个对象?
为了选择一个对象,我使用以下命令:

global.HandleMenu = function (b) {
    var c = menu.filter(function (d) {
        return d.name == b;
    });
    c.forEach(function (d) {
        Say(d.message);
    });
};

那么,我能在forEach函数里面添加delete d;或者d.remove()吗?或者我有什么遗漏的吗?

2个回答

3
假设您想要删除的项目名称存储在一个名为name的变量中,类似于:
for (var i = 0; i = global.menu.length - 1; i--) {
   var current = global.menu[i];
   if (current.name === name) global.menu.splice(i, 1);
}

应该是可以正常工作的。注意,我没有测试空值;但这是一般的想法。


这个方法可以行得通,但是如果只有对象的名称,我该如何找到对象的索引呢? - Dalton Gore
这个也可以,但我更喜欢上面的答案,它更简单明了。不过还是谢谢! - Dalton Gore
@dalton,没问题。这只是一种替代方案。请注意,我的实现修改了实际的数组,而filter则创建了一个新的数组。 - hvgotcodes
是的,但如果您用新数组替换旧数组,一切都会解决,不是吗? - Dalton Gore
1
@DaltonGore:如果原始数组还有其他引用,那么它们仍将保留旧的引用。除非您绝对可以保证没有其他代码保留对global.menu的引用,否则修改原始数组可能更安全。 - user1106925
我不是“我”,啊,说得好。事实上是个很棒的观点。 - hvgotcodes

2

使用过滤器并重新分配

global.menu = global.menu.filter(function(a){ return a.item != "be delete" };

这看起来像是要删除整个数组,而我只需要删除选定名称的对象。 - Dalton Gore
删除一个项目等于选择其他项目而不删除该项目。这是使用列表的简单解决方案。 - blueiur
哦哦哦哦。我刚才实际上看了一下代码,谢谢,这正是我要找的。傻笑傻笑傻笑。 - Dalton Gore
如果有其他参考原始的 global.menu 数组,它们将保持不变。 - user1106925

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接