#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)
}
}