/ / відфільтрувати глибоко вкладений об’єкт і повернути новий об’єкт - json, loops, object, filter, lodash

фільтрують глибоко вкладений об'єкт і повертають новий об'єкт - json, цикли, об'єкт, фільтр, lodash

У мене вкладений об'єкт 4 рівня, який виглядає приблизно так

{
"name": "“Mike”",
"id": 1000,
"img": "“#”",
"children": [
{
"name": "“Jack”",
"id": 1100,
"img": "#",
"married": true,
"children": [
{
"name": "”Julia“",
"id": 1110,
"img": "#"
}
]
},
{
"name": "”Lily“",
"id": 1200,
"img": "#",
"married": true,
"children": [
{
"name": "”Coco“",
"id": 1210,
"img": "#",
"married": true,
"children": {
"name": "”Olivia“",
"id": 1211,
"img": "#",
"married": false
}
}
]
}
]
}

У мене масив idToDisplay = ["1000","1100","1200","1210"] Я хочу відфільтрувати ідентифікатори та залишити частини, які не відповідають idToDisplay щоб я міг отримати новий об’єкт, виглядає так

{
"name": "“Mike”",
"id": 1000,
"img": "“#”",
"children": [
{
"name": "“Jack”",
"id": 1100,
"img": "#",
"married": true,
]
},
{
"name": "”Lily“",
"id": 1200,
"img": "#",
"married": true,
"children": [
{
"name": "”Coco“",
"id": 1210,
"img": "#",
"married": true,
}
]
}
]
}

Який найкращий спосіб ітерації? Дякую!

Відповіді:

1 для відповіді № 1

Якщо ви просто хочете змінити свої дані на місці, ви можете рекурсивно їх перемістити так:

var data = ... your data ...
var ids = [1000, 1100]
var handleNode = function(node) {
node.children = node.children.filter(x => ids.includes(x.id))
node.children.forEach(handleNode)
}
if (!ids.includes(data.id)) {data = {}}
handleNode(data)

Згодом ваші дані складаються лише з вузлів із збігаються ідентифікаторами.