从数组中删除一个对象? [复制]

Posted

技术标签:

【中文标题】从数组中删除一个对象? [复制]【英文标题】: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() 吗?还是我错过了什么?

【问题讨论】:

【参考方案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 的引用。

以上是关于从数组中删除一个对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中删除特定对象? [复制]

使用索引从对象数组中删除对象? [复制]

如何从 Swift 数组中删除这个对象? [复制]

使用 TypeScript 从数组中删除具有特定 id 字段值的对象的聪明方法是啥? [复制]

如果数组存在于另一个多维数组中,如何从多维数组中删除该数组? [复制]

将随机值从数组复制到对象无法获得稳定的结果