我有一个如下的对象:
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。
有什么想法吗?
答案 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;
}
答案 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)
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()
浏览器支持