я пытаюсь рекурсивно перебирать вложенные объекты, чтобы получить ключ и значение.
Моя структура данных:
{
"id": 8743077530231325861,
"name": "Name of XYZ",
"key X": 0,
"key Y": {
"details": {
"value": {
"up": 5,
"down": 3
},
"path": "xyz"
},
"key Z": {
"value": 1,
"path": "abc"
}
},
"createdTimestamp": 1554446703000
}
и моя функция:
recursion = (item, keyString) => {
if (isObject(item)){
Object.keys(item).map((key) => {
return this.recursion(item[key], keyString+`.${key}`)
})
}else{
return {item, keyString}
}
}
и я называю это:
Object.keys(data).map(key =>{
console.info(this.recursion(data[key], key))
})
Моя проблема в том, что ключи, которые являются объектами, всегда не определены. Я знаю, что это потому, что им нужно повторить итерацию в другой раз, и результат будет быстрее, чем функция. Когда я распечатываю значения в конце функции рекурсии вместо того, чтобы возвращать их, они не являются неопределенными.
В конце я хочу для каждого ключа все самые глубокие значения и «пути». Например
8743077530231325861,"id"
Name of XYZ,"name"
0, "keyX"
5, "keyY.details.value.up"
...
Я уже пытался использовать await/async, но не могу получить все значения
было бы неплохо, если бы кто-нибудь подсказал мне
Вы ничего не возвращаете в if (isObject(item)){ ... }. Обновите Object.keys(item).map до return Object.keys(item).map и все должно работать
@MaheerAli Я хочу получить самый глубокий вложенный элемент и путь. Первый вывод = 8743077530231326000, второй: имя XYZ, имя, третий: 5, key.details.value.up



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно вернуть результат сопоставления.
const
isObject = v => v && typeof v === 'object',
recursion = (item, path = '') => isObject(item)
? Object
.keys(item)
.flatMap(k => recursion(item[k], path + (path && '.') + k))
: { item, path };
var data = { id: 8743077530231326000, name: "Name of XYZ", "key X": 0, "key Y": { details: { value: { up: 5, down: 3 }, path: "xyz" }, "key Z": { value: 1, path: "abc" } }, createdTimestamp: 1554446703000 },
result = recursion(data);
console.info(result);но таким образом он возвращает объект как массивы. Я хочу снова вызвать рекурсию для каждого ключа в объекте, чтобы просто распечатать самую глубокую пару элемент + ключ. Например: 5, keyY.details.value.up, 3, keyY.details.value.down и т. д.
пожалуйста, добавьте желаемый результат к вопросу. Кстати, в вопросе не говорится, что нужен самый глубокий объект. а если их больше одного?
я добавил желаемый результат
Каков ожидаемый результат?