简体   繁体   中英

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

Given array [{GUID, other properties}, ...],

How can I remove a specific object from a javascript array by its GUID (or any object property)?

I'm trying to use splice() ,

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

This won't work because I can't directly identify the value in the array, as such:

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

Shown here: How do I remove a particular element from an array in JavaScript?

I would recommend using the Array.prototype.filter function, like this

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

This would iterate through the elements of game.data.collectedItems and filter out the items for which the function passed as a parameter, returns false . In your case, all the objects will return true except the object whose GUID matches entityObj["GUID"] .

Note: Since filter creates a new Array, we need to replace the old array object with the new array object. That is why we are assigning the result of filter back to game.data.collectedItems .

This should work on all Browsers:

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');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM