Angular 9: преобразовать объект массива во вложенный массив - PullRequest
0 голосов
/ 06 августа 2020

пытаюсь переставить:

[
  {
    "id": 5,
    "levelName": "Level 1"
  },
  {
    "id": 6,
    "levelName": "Level 2"
  },
  {
    "id": 7,
    "levelName": "Level 3"
  }
]

Кому:

[
  {
    "id": 5,
    "levelName": "Level 1",
    "level": [
      {
        "id": 6,
        "levelName": "Level 2",
        "level": [
          {
            "id": 6,
            "levelName": "Level 2",
            "level": []
          }
        ]
      }
    ]
  }
]

Я пытаюсь создать древовидную структуру пользовательского интерфейса. но мне интересно, как добиться преобразования части данных. Возможно, вы принимаете желаемое за действительное, но есть ли более простой способ, чем зацикливание внутри циклов!?

1 Ответ

1 голос
/ 06 августа 2020

Вы можете уменьшить массив, используя объект в качестве карты для уровней.

const arr = [ { "id": 5, "levelName": "Level 1" }, { "id": 6, "levelName": "Level 2" }, { "id": 7, "levelName": "Level 3" } ];
const res = arr.reduce((acc,obj)=>{
  let level = +obj.levelName.slice(obj.levelName.indexOf(' ') + 1);
  (acc[level] = acc[level] || []).push(obj);
  acc[level + 1] = acc[level + 1] || (obj['level'] = []);
  return acc;
}, {})[1];
console.log(res);
...