【问题标题】:Delete an object from an array? [duplicate]从数组中删除一个对象? [复制]
【发布时间】:2012-07-24 12:27:56
【问题描述】:

可能重复:
JavaScript Array Delete Elements

所以,在 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() 吗?还是我错过了什么?

【问题讨论】:

    标签: javascript arrays node.js object


    【解决方案1】:

    使用过滤器并重新分配

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

    【讨论】:

    • 这看起来会删除整个数组,而我只需要删除具有选定名称的对象。
    • 删除一项等于选择其他项而不删除项。这是使用列表的简单解决方案
    • OHHHHHH。德普。我实际上只是查看了代码,谢谢这正是我正在寻找的。嘭嘭嘭嘭。
    • 如果有任何其他对原始global.menu 数组的引用,它们将保持不变。
    【解决方案2】:

    假设您要删除的项目的名称位于名为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,没问题。这只是一种选择。请注意,我的实现修改了实际数组,过滤器创建了一个新数组。
    • 是的,但是如果您用新数组替换旧数组,一切都会解决,不是吗?
    • @DaltonGore:如果有其他对原始数组的引用,则不会。他们仍然会坚持旧的。修改原始代码可能更安全,除非您可以绝对保证没有其他代码保留对 global.menu 的引用。
    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2018-11-14
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多