从数组中删除一个对象? [复制]
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
的引用。以上是关于从数组中删除一个对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 TypeScript 从数组中删除具有特定 id 字段值的对象的聪明方法是啥? [复制]