@the5x

Как рекурсивно изменить state в дереве массивов с объектами?

Есть такое дерево, где вложенность children может быть неограниченной. Как добраться рекурсивно на каждой итерации map к children и изменить state?

const data = [
  {
    id: 1, title: 'Article 1',
    children: [
      {
        id: 1, title: 'Title Inside 1',
        children: [
          {
            id: 1, title: 'Title Inside 2',
          }
      ]
    }]
  },


  { id: 2, title: 'Article 2' },
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
hzzzzl
@hzzzzl
как-то так, если я правильно понял что сделать надо вообще

obj = {
  "id": 1,
  "title": "Article 1",
  "children": [
    {
      "id": 1,
      "title": "Title Inside 1",
      "children": [
        {
          "id": 11,
          "title": "Title Inside 2",
          "children": [
            {
              "id": 121,
              "title": "Title Inside 4"
            },
            {
              "id": 12341,
              "title": "Title Inside 6"
            }
          ]
        }
      ]
    }
  ]
}

function fn(obj, upd) {
  obj = {...obj, ...upd}
  if(Array.isArray(obj.children)) { 
    obj.children = obj.children.map(child => fn(child, upd)) 
  }
  return obj
}

fn(obj, { id: 2, title: 'Article 2' })


это для одного объекта, но должно получиться за-map-ать массив таких элементов такой функцией
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы