关于javascript:如何通过对象的属性从对象数组中删除特定的对象?

How to remove a specific Object from an array of Objects, by object's property?

给定数组[guid,其他属性,…],

如何从javascript数组中通过其guid(或任何对象属性)删除特定对象?

我想用splice()

1
2
3
4
var index = game.data.collectedItems.indexOf(entityObj.GUID);
if (index > -1) {
    game.data.collectedItems.splice(index, 1);
}

这不起作用,因为我无法直接标识数组中的值,例如:

1
2
var array = [2, 5, 9];
var index = array.indexOf(5);

如图所示:如何在javascript中从数组中删除特定元素?


我建议使用Array.prototype.filter函数,如下所示

1
2
3
game.data.collectedItems = game.data.collectedItems.filter(function(currentObj){
    return currentObj.GUID !== entityObj["GUID"];
});

这将遍历game.data.collectedItems的元素,并筛选出函数作为参数传递的项,返回false。在您的情况下,所有对象都将返回true,但GUIDentityObj["GUID"]匹配的对象除外。

注意:由于filter创建了一个新的数组,我们需要用新的数组对象替换旧的数组对象。这就是为什么我们将filter的结果分配回game.data.collectedItems的原因。


这应该适用于所有浏览器:

1
2
3
4
5
6
7
8
9
10
11
12
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');