检查对象是否包含具有特定值的属性

时间:2013-03-21 09:03:54

标签: javascript

我有一个如下的对象:

var _obj = { 
    'name1@gmail.com' : { 
        'bob@gmail.com' : {
            channel: 'V2231212', 
            from: 'bob'
        },
        'judy@gmail.com' : {
            channel: 'V223231212', 
            from: 'judy'
        }
    },
    'name2@gmail.com' : { 
        'bill@gmail.com' : {
            channel: 'V123123',
            from: 'bill'
        }
    }
};

我如何检查对象中的任何位置是否存在等于“channel”的“V123123”?

在上述情况下,bill @ gmail等于V123123并且应该返回true。

有什么想法吗?

3 个答案:

答案 0 :(得分: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 :(得分: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;
  })
})

答案 2 :(得分: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()浏览器支持


  • Firefox(Gecko):4(2.0)
  • Chrome:5
  • Internet Explorer:9
  • Opera:12
  • Safari:5