检查JS对象中的值

时间:2011-01-04 21:47:41

标签: javascript jquery object

我有一个像这样的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上。

5 个答案:

答案 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;
}