我试图只向数组添加唯一的命名对象(没有重复项),为了做到这一点,我必须先检查对象是否已存在于数组中。不幸的是,我的所有尝试都不断向数组中添加重复的对象。我可以逐个检查每个对象的数组,看看我想要添加的对象是否已经在数组中,如果是,我什么都不做。所以,我正在检查我的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));
}
});
答案 0 :(得分:0)
在循环中,您应该将weFoundIt
初始化为false
,并且只有在找到它时才将其设置为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))
}
答案 1 :(得分:0)
我会使用filter方法。
//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/(请参阅控制台中的结果)