Поиск определенного ключа в заданном объекте в JS

#javascript #json

#javascript #json

Вопрос:

Поиск определенного ключа в заданном объекте, включая вложенные объекты и вложенные массивы объектов. что может быть лучшим решением или техникой в javascript?

Заданный ключ: reference
Данный объект:

 {
  "reference": "Patient/1",
  "subjectOrAnyKey": {
    "reference": "Patient/2"
  },
  "containedOrAnyKey": [
    {
      "reference": "Practitioner/4"
    },
    {
      "subjectOrAnyKey": {
        "reference": "Patient/11"
      },
      "requesterOrAnyKey": {
        "reference": "Practitioner/3"
      },
      "performerOrAnyKey": [
        {
          "reference": "Practitioner/4"
        }
      ]
    }
  ]
}
 

PS: решается с помощью следующего:

     function findAllValues(obj, key){
        for (let [k, v] of Object.entries(obj)){
            if (k === key) {
                console.log(v)
            } else if (v.constructor === Array amp;amp; !v.length === false){
                for (let entry of v){
                    findAllValues(entry, key)
                }
            } else if (v.constructor === Object amp;amp; !Object.keys(v).length === false) {
                findAllValues(v, key)
            }
        }
    }
 

Комментарии:

1. что вы уже пробовали? пожалуйста, добавьте.

2. создайте массив ключей объекта с помощью Object.keys() и выполните итерацию с помощью цикла foreach() и найдите ссылку, равную заданному ключу

3. Это может показаться странным, но в этом случае я бы, вероятно, вернулся к строке и извлек соответствующее значение с помощью некоторой магии регулярных выражений.

Ответ №1:

Рекурсия пригодится в таких типах объектов, где вы не можете определить, насколько вложенными они могут быть

пожалуйста, найдите приведенный ниже фрагмент

функция, которая перебирает каждый ключ внутри объекта, если ключ совпадает и его тип не является объектом, она выводит его значение. если это объект, он вызывает сам метод с вложенным объектом.

 function findAllKeys(obj, key){
    for(let prop in obj){
        if(typeof obj[prop] !== 'object' amp;amp; prop === key)
            console.log(obj[prop]);
        else if(typeof obj[prop] === 'object')
            findAllKeys(obj[prop],key)
    }
}