检查多维对象

时间:2018-04-29 16:08:56

标签: javascript jquery object

假设我想确定一个键/值对是否存在于任何类型/级别的对象中,而不是事先知道对象结构。这可能吗?

实施例: 配对搜索:“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"
    }]
}]

}

2 个答案:

答案 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