繁体   English   中英

如何检查数组中对象的存在

[英]How to check for the existence of objects in an array

我正在尝试仅将唯一的命名对象(没有重复的对象)添加到数组中,为了做到这一点,我必须首先检查对象是否已存在于数组中。 不幸的是,我所有的尝试都将重复对象添加到数组中。 我可以逐个检查每个对象的数组,以查看要添加的对象是否已在数组中,如果是,则什么也不做。 因此,我正在检查我的item.ORG与数组中对象名称之间的匹配。 这有助于查看它是否匹配,但是如果不匹配,则我不想将新对象添加到数组中,因为它可能与数组下方的对象匹配。 我下面的最新尝试也不起作用。

//constructor for OrgObj that goes in ORRArr
function OrgObj(itemOrg) {
    this.name = itemOrg;
    this.count = 0;
    this.url_status_list = [];
}

var ORGArr = [];

$.each(_items, function(index, item) {
            var weFoundIt = true;

            if (ORGArr.length === 0) {
                ORGArr.push(new OrgObj(item.ORG));
            } else {
                for (var i = 0; i < ORGArr.length; i++) {
                    if (item.ORG === ORGArr[i].name) {
                        break;
                    } else {
                        weFoundIt = false; {

                        }
                    }
                    if (weFountIt === false) {
                        ORGArr.push(new OrgObj(item.ORG));
                    }
                });

在循环中,您应该将weFoundIt初始化为false并且仅在找到weFoundIt其设置为true 还要将检查放在循环后面,最后一个条件中也有一个错字(用fount代替found )。 这是一个工作示例: https : //jsfiddle.net/y4b80wcc/

一个较短的替代方法是https://jsfiddle.net/xdwzfghr/1/

if(ORGArr.map(function(x){return x.name;}).indexOf(item.ORG) === -1) {
    ORGArr.push(new OrgObj(item.ORG))
}

我会使用过滤器方法。

//constructor for OrgObj that goes in ORRArr
function OrgObj(itemOrg) {
  this.name = itemOrg;
  this.count = 0;
  this.url_status_list = [];
}

var ORGArr = [];
var _items = [new OrgObj('A'), new OrgObj('B'), new OrgObj('C'), new OrgObj('B'), new OrgObj('B'), new OrgObj('A'), new OrgObj('D')]


var foundNamesLookup = {};
ORGArr = _items.filter(function(item) {
  if (foundNamesLookup [item.name]) {
    return false;
  }
  foundNamesLookup [item.name] = true;
  return true;
});

console.log(ORGArr);

编辑: https : //jsfiddle.net/yoy0s7cL/ (请参阅控制台中的结果)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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