Проверка значения в объекте JS - PullRequest
1 голос
/ 05 января 2011

У меня есть объект 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 ]

3 голосов
/ 05 января 2011

Простой:

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...
}
3 голосов
/ 05 января 2011
var found = false;
for(var nr in ob) {
  if(ob.hasOwnProperty(nr)) {
    if(ob[nr].id === 103) {
       found=true;
       break;
    } 
  } 
}
if(!found) {
  //add ...
}

Было бы проще, если бы вы могли использовать идентификатор в качестве ключа для объекта

1 голос
/ 05 января 2011

Является ли проблемой использование идентификатора в качестве ключа вашего объекта?Вот так:

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
}
0 голосов
/ 05 января 2011

Если они не проиндексированы по значению, которое вы проверяете, я считаю, что вам нужно перебрать все элементы объекта и проверить каждый из них.

function recordExistsById(id, ob) {
    for (var key in ob) {
        if (ob[key].hasOwnProperty("id") && ob[key].id == id) {
            return true;
        }
    }
    return false;
}
0 голосов
/ 05 января 2011

Я совершенно уверен, что вы не можете сделать это без цикла, поскольку IN касается проверки объекта em, как сказать это ... свойства, например, если в вашем примере существует "id", а не переменная

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...