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

Gro*_*ler 5 javascript arrays

给定数组[{GUID,other properties},...],

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

我正在尝试使用splice()

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

这是行不通的,因为我无法直接识别数组中的值,如下所示:

var array = [2, 5, 9];
var index = array.indexOf(5);
Run Code Online (Sandbox Code Playgroud)

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

the*_*eye 1

我建议使用该Array.prototype.filter功能,就像这样

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

这将迭代 的元素game.data.collectedItems并过滤掉函数作为参数传递的项目 returns false。在您的情况下,除了匹配true的对象之外,所有对象都将返回。GUIDentityObj["GUID"]

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