Существует, пожалуй, очень много способов решить эту проблему, но, на мой взгляд, самый простой способ - это просто выполнить поиск в структуре данных и сохранить идентификаторы в обратном порядке, когда вы их найдете. Таким образом, результат - это то, что вам нужно.
Вы также можете просто изменить порядок следования другому подходу.
Я хотел бы отметить, что структура json немного странная. Я ожидал бы, что он просто вложит children
массивы и не переименует их в parent
, children
и grandchildren
.
let data = [{
"id": "1",
"name": "Deer, spotted",
"parents": [
{
"id": "133",
"name": "Jaime Coldrick",
"children": [
{
"id": "0723",
"name": "Ardys Kurten",
"grandchildren": [
{
"id": "384",
"name": "Madelle Bauman"
},
{
"id": "0576",
"name": "Pincas Maas"
},
{
"id": "5",
"name": "Corrie Beacock"
}
]
}]
}]
}]
const expectedResults = ['5', '0723', '133', '1']
function traverseInverseResults(inputId, childArray) {
if(!childArray){ return }
for (const parent of childArray) {
if(parent.id === inputId){
return [parent.id]
} else {
let res = traverseInverseResults(inputId, parent.parents || parent.children || parent.grandchildren) // This part is a bit hacky, simply to accommodate the strange JSON structure.
if(res) {
res.push(parent.id)
return res
}
}
}
return
}
let result = traverseInverseResults('5', data)
console.log('results', result)
console.log('Got expected results?', expectedResults.length === result.length && expectedResults.every(function(value, index) { return value === result[index]}))