假设我想确定一个键/值对是否存在于任何类型/级别的对象中,而不是事先知道对象结构。这可能吗?
实施例: 配对搜索:“kod”:“REVH” 对象:
{
"names": [{
"name1": "xxx",
"name2": "yyy",
"pn": null,
"functions": [{
"kod": "LE",
"text": "test"
}, {
"kod": "VD",
"text": "test"
}]
}, {
"name1": null,
"name2": "Comp",
"pn": null,
"pn2": "1239992",
"functions": [{
"kod": "REV",
"text": "temp"
}]
}, {
"name1": "Peter",
"name2": "name",
"pn": "2192992",
"pn2": null,
"functions": [{
"kod": "REVH",
"text": "temp"
}]
}]
}
答案 0 :(得分:1)
使用JSON.stringify()
和String.prototype.indexOf()
即可。您可以简单地公开一个函数,该函数返回String search
是否在Object
let obj={names:[{name1:"xxx",name2:"yyy",pn:null,functions:[{kod:"LE",text:"test"},{kod:"VD",text:"test"}]},{name1:null,name2:"Comp",pn:null,pn2:"1239992",functions:[{kod:"REV",text:"temp"}]},{name1:"Peter",name2:"name",pn:"2192992",pn2:null,functions:[{kod:"REVH",text:"temp"}]}]};
function pairInObject (obj, search) {return JSON.stringify(obj).indexOf(search) != -1 }
console.log(pairInObject(obj,'"kod":"REVH"'))
console.log(pairInObject(obj,'"foo":"bar"'))
答案 1 :(得分:1)
这个递归解决方案使用Array.some()
和Object.values()
来迭代对象/数组的内容,并查找键/值组合:
const searchKeyValue = (data, key, value) => {
// if falsy or not an object/array return false
if(!data || typeof data !== 'object') return false;
// if the value of the key equals value return true
if(data[key] === value) return true;
// return the results of using searchKeyValue on all values of the object/array
return Object.values(data).some((data) => searchKeyValue(data, key, value));
};
const data = {"names":[{"name1":"xxx","name2":"yyy","pn":null,"functions":[{"kod":"LE","text":"test"},{"kod":"VD","text":"test"}]},{"name1":null,"name2":"Comp","pn":null,"pn2":"1239992","functions":[{"kod":"REV","text":"temp"}]},{"name1":"Peter","name2":"name","pn":"2192992","pn2":null,"functions":[{"kod":"REVH","text":"temp"}]}]};
console.log(searchKeyValue(data, 'kod', 'REVH')); // true
console.log(searchKeyValue(data, 'text', null)); // false
console.log(searchKeyValue(data, 'pn', null)); // true