如何从对象数组中删除特定对象,按对象的属性?
给定数组[{GUID,其他属性},...],如何从对象数组中删除特定对象,按对象的属性?
如何通过其GUID(或任何对象属性)从javascript数组中删除特定对象?
我试图使用splice()
,
var index = game.data.collectedItems.indexOf(entityObj.GUID);
if (index > -1) {
game.data.collectedItems.splice(index, 1);
}
这不会起作用,因为我不能直接在阵列中确定的价值,因为这样的:
var array = [2, 5, 9];
var index = array.indexOf(5);
如下所示: How do I remove a particular element from an array in JavaScript?
我会推荐使用Array.prototype.filter
函数,就像这样
game.data.collectedItems = game.data.collectedItems.filter(function(currentObj){
return currentObj.GUID !== entityObj["GUID"];
});
这将重复遍历game.data.collectedItems
的元素并过滤掉作为参数传递的函数的项目,返回false
。在你的情况下,所有对象将返回true
,但GUID
匹配entityObj["GUID"]
的对象除外。
注意:由于filter
创建一个新的数组,我们需要用旧的数组对象替换旧的数组对象。这就是为什么我们将filter
的结果返回到game.data.collectedItems
。
这太棒了。感谢解释它是如何工作的。虽然在某个时候使用对象属性从数组中拼接会很酷。 – Growler 2015-02-08 07:26:44
@Growler实际上,首先你需要找到数组中项目的索引(你认为它并不是直截了当的),然后你需要使用'splice'。这就是为什么我推荐'filter'。简单地抛弃旧的数组,并构建一个没有你不想要的元素的新数组:#) – thefourtheye 2015-02-08 07:30:03
我改变我的问题,只添加实体对象到数组,而不是{GUID,实体对象}。之后,我猜想改变你的答案:) – Growler 2015-02-08 07:37:03
这应该在所有的浏览器:
function withoutPropVal(ary, propVal){
var a = [];
for(var i=0,l=ary.length; i<l; i++){
var o = ary[i], g = 1;
for(var n in o){
if(o[n] === propVal)g = 0;
}
if(g)a.push(o);
}
return a;
}
var newArray = withoutPropVal(yourArray, 'Object Property Value to Leave those Objects Out Here');
http://stackoverflow.com/questions/6485127/how-to-delete-unset-the-properties-of-a-javascript-object – 2015-02-08 07:20:13
HTTP ://stackoverflow.com/questions/1596782/how-to-unset-a-javascript-variable – 2015-02-08 07:20:43
http://stackoverflow.com/questions/208105/how-to-remove-a-property-from-a-javascript -object – 2015-02-08 07:21:04