[英]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.