簡體   English   中英

如何通過對象的屬性從對象數組中刪除特定的對象?

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

給定數組[{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);

如下所示: 如何從JavaScript中刪除數組中的特定元素?

我建議使用Array.prototype.filter函數,就像這樣

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

這將迭代game.data.collectedItems的元素並過濾掉函數作為參數傳遞的項,返回false 在您的情況下,除GUIDentityObj["GUID"]匹配的對象外,所有對象都將返回true

注意:由於filter創建了一個新的Array,我們需要用新的數組對象替換舊的數組對象。 這就是為什么我們將filter的結果分配給game.data.collectedItems

這適用於所有瀏覽器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM