首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据对象的属性从对象数组中删除特定的对象?

问如何根据对象的属性从对象数组中删除特定的对象?
EN

Stack Overflow用户
提问于 2015-02-08 07:16:53
回答 2查看 1.3K关注 0票数 8

给定数组{GUID,其他属性},.,

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

我试着用splice(),

代码语言:javascript
复制
var index = game.data.collectedItems.indexOf(entityObj.GUID);
if (index > -1) {
    game.data.collectedItems.splice(index, 1);
}

由于无法直接识别数组中的值,因此这将无法工作,因此:

代码语言:javascript
复制
var array = [2, 5, 9];
var index = array.indexOf(5);

如下所示:How do I remove a particular element from an array in JavaScript?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-08 07:20:24

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

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2015-02-08 07:36:44

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

代码语言:javascript
复制
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');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28391564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档