我有一个像这样的JS对象:
var ob{
1 : {
id:101,
name:'john',
email:'john@email.com'
},
2 : {
id:102,
name:'jim',
email:'jim@email.com'
},
3 : {
id:103,
name:'bob',
email:'bob@email.com'
},
}
我想检查这个JS对象是否已包含记录。如果没有,那么我想添加它。例如。
if(ob contains an id of 101){
//don't add john
}else{
//add john
}
抓住我的漂移?非常简单的问题。我只是想知道最好的方法。
谢谢大家!
W上。
答案 0 :(得分:3)
var found = false;
for(var nr in ob) {
if(ob.hasOwnProperty(nr)) {
if(ob[nr].id === 103) {
found=true;
break;
}
}
}
if(!found) {
//add ...
}
如果你可以使用id作为对象的键
,那会更容易答案 1 :(得分:3)
简单:
function contains_id(obj, id) {
for(var key in obj)
if(obj.hasOwnProperty(key) &&
obj[key]['id'] && obj[key]['id'] == id)
return true;
return false;
}
var ob = ...
if(contains_id(ob, 2)) {
//do something...
} else {
//do something else...
}
答案 2 :(得分:1)
使用id作为对象的键是否有问题?像那样:
var ob{
101 : {
id:101,
name:'john',
email:'john@email.com'
},
102 : {
id:102,
name:'jim',
email:'jim@email.com'
},
103 : {
id:103,
name:'bob',
email:'bob@email.com'
},
}
if(ob[101]){
//don't add john
}else{
//add john
}
答案 3 :(得分:0)
我很确定你不能在没有循环的情况下做到这一点,因为IN关注的是检查对象的em如何说出...属性例如如果你的例子中存在“id”而不是变量< / p>
答案 4 :(得分:0)
除非它们被您检查的值编入索引,否则我认为您需要迭代对象中的所有元素并检查每个元素。
function recordExistsById(id, ob) {
for (var key in ob) {
if (ob[key].hasOwnProperty("id") && ob[key].id == id) {
return true;
}
}
return false;
}