Проверьте, существует ли пара ключ-значение в многомерном объекте - PullRequest
0 голосов
/ 29 апреля 2018

Допустим, я хочу определить, существует ли пара ключ / значение в каком-либо типе / уровне объекта, не зная структуры объекта перед этим. Возможно ли это?

Пример: Пара для поиска: "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 голосов
/ 29 апреля 2018

Это рекурсивное решение использует 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
0 голосов
/ 29 апреля 2018

Это возможно при использовании 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"'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...