Javascript 如何检查数组中是否存在对象
我试图只向数组中添加唯一的命名对象(没有重复项),为此,我必须首先检查数组中是否已经存在该对象。不幸的是,我所有的尝试都在不断地向数组中添加重复的对象。我可以逐个检查每个对象的数组,看看我要添加的对象是否已经在数组中,如果已经在数组中,我什么也不做。因此,我正在检查我的item.ORG和数组中对象的名称是否匹配。这有助于查看它是否匹配,但如果不匹配,我不想将新对象添加到数组中,因为它可能与数组中较低的对象匹配。下面是我最近的一次尝试,也不起作用Javascript 如何检查数组中是否存在对象,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我试图只向数组中添加唯一的命名对象(没有重复项),为此,我必须首先检查数组中是否已经存在该对象。不幸的是,我所有的尝试都在不断地向数组中添加重复的对象。我可以逐个检查每个对象的数组,看看我要添加的对象是否已经在数组中,如果已经在数组中,我什么也不做。因此,我正在检查我的item.ORG和数组中对象的名称是否匹配。这有助于查看它是否匹配,但如果不匹配,我不想将新对象添加到数组中,因为它可能与数组中较低的对象匹配。下面是我最近的一次尝试,也不起作用 //constructor for OrgObj
//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));
}
});
//ORGRAR中的OrgObj的构造函数
功能OrgObj(项目组织){
this.name=itemOrg;
此值为0.count;
this.url_status_list=[];
}
var ORGArr=[];
$.each(_项,函数(索引,项){
var-weFoundIt=true;
if(ORGArr.length==0){
ORGArr.push(新的OrgObj(item.ORG));
}否则{
对于(变量i=0;i
在循环中,您应该将weFoundIt
初始化为false
,并且只有在找到它时才将其设置为true
。还要将复选框放在循环后面,最后一个条件(found
而不是found
)中还有一个打字错误。下面是一个工作示例:
一个较短的替代方案是
我会用这个方法
编辑:(参见控制台中的结果)我似乎仍然无法通过将weFoundIt更改为false使其工作。此外,当我使用F12工具时,它表示不支持映射。还有其他想法吗?我只是注意到您的缩进与括号不符。您的
if(weFoundIt==false)
实际上在循环中。您应该将其放在循环后面。此外,您在if中发现了一个拼写错误,而不是,这是您编写的fount
。下面是一个工作示例:
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);