如何检查深度嵌套对象是否包含值?我想检查给定的对象是否包含例如包含“where”的属性值:
let data = {
name: 'Somebody',
address: {
city: 'somewhere'
},
tags: [{
id: 5
name: 'new'
}]
}
check(data, 'where') // should be true
Run Code Online (Sandbox Code Playgroud)
您可以使用recursive function下面的a来迭代键并检查类型。如果类型是objector array,它将调用递归检查。
工作片段:
let data = {
name: 'Somebody',
address: {
city: 'somewhere'
},
tags: [{
id: 5,
name: 'new'
}]
};
const check = (obj, text) => {
var exists = false;
var keys = Object.keys(obj);
for(var i = 0; i < keys.length; i++) {
var key = keys[i];
var type = typeof obj[key];
if(type === 'object') {
exists = check(obj[key], text);
} else if(type === 'array') {
for(var j = 0; j < obj[key].length; j++) {
exists = check(obj[key][j], text);
if(exists) {
break;
}
}
} else if(type === 'string') {
exists = obj[key].indexOf(text) > -1;
}
if(exists) {
break;
}
}
return exists;
};
console.log(check(data, 'where')); // should be trueRun Code Online (Sandbox Code Playgroud)