-1

我有一个如下对象:

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。

有任何想法吗?

4

3 回答 3

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

于 2013-03-21T09:10:19.190 回答
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;
  })
})
于 2013-03-21T09:34:40.803 回答
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');

演示- 使用getOwnPropertyNames()



getOwnPropertyNames()浏览器支持


  • 火狐(壁虎):4(2.0)
  • 铬:5
  • 互联网浏览器:9
  • 歌剧:12
  • 野生动物园:5
于 2013-03-21T10:16:24.183 回答