2013-03-21 4 views
-1

У меня есть объект, как показано ниже:Проверьте объект содержит свойство с определенным значением

var _obj = { 
    '[email protected]' : { 
     '[email protected]' : { 
      channel: 'V2231212', 
      from: 'bob' 
     }, 
     '[email protected]' : { 
      channel: 'V223231212', 
      from: 'judy' 
     } 
    }, 
    '[email protected]' : { 
     '[email protected]' : { 
      channel: 'V123123', 
      from: 'bill' 
     } 
    } 
}; 

Как я могу проверить, если где-нибудь в объекте «channel» существует, что равно «V123123»?

В приведенном выше случае счет @ gmail равен V123123 и должен возвращать значение true.

Любые идеи?

+2

[whathaveyoutried.com] (HTTP: // whathaveyoutried.com) –

+0

Я не знаю с чего начать:/ – Alosyius

+1

http://stackoverflow.com/questions/3021206/how-do-i-see-if-a-big-json-object-contains-a-value –

ответ

0

Попробуйте:

console.log(containsPropertyValue(_obj, 'channel', 'V123123')); 

function containsPropertyValue(obj, propertyName, propertyValue){ 
    var contains = false; 
    function a(o){ 
     for(var prop in o) 
      if(o.hasOwnProperty(prop)){ 
       if(prop === propertyName && o[prop] === propertyValue){ 
        contains = true; 
        return; 
       } 
       if(typeof o[prop] === 'object') 
        a(o[prop]); 
      } 
    } 
    a(_obj); 
    return contains; 
} 

JSFiddle

+1

Я бы поставил собственный тест свойств в блок 'if', а не отдельный блок. – RobG

0

Еще одно решение

Object.keys(_obj).forEach(function(v, i){ 
    Object.keys(_obj[v]).forEach(function(w, k){ 
    if(_obj[v][w].hasOwnProperty('channel')&&_obj[v][w]['channel']=='V123123') 
     return true; 
    }) 
}) 
0

Другой альтернативный использованием getOwnPropertyNames

function hasPropertyWithValue(obj, propertyName, propertyValue) { 
    var matchFound = false; 
    var _prop; 
    var _properties = Object.getOwnPropertyNames(obj); 

    for(var i = 0; i < _properties.length; i++){ 
     _prop = _properties[i]; 

     if(_prop === propertyName && obj[_prop] === propertyValue){ 
      return true; 
     } 

     if(typeof obj[_prop] === 'object'){ 
      matchFound = hasPropertyWithValue(obj[_prop], propertyName, propertyValue); 
      if (matchFound){ 
       return true; 
      } 
     } 
    } 

    return matchFound; 
} 

Б как это:

var matched = hasPropertyWithValue(_obj, 'channel', 'V123123'); 

DEMO - Использование getOwnPropertyNames()



getOwnPropertyNames() Browser Support


  • Firefox (Gecko): 4 (2,0)
  • Chrome: 5
  • Internet Explorer: 9
  • Opera: 12
  • Safari: 5
Смежные вопросы