Как установить объект перед массивом в JS? - PullRequest
0 голосов
/ 27 февраля 2020

в моем текущем проекте angular я должен изменить массив JSON, чтобы он мог отображаться в дереве. Чтобы дерево могло выводить объект, вложенный массив должен быть упакован в объект.

Ожидаемая форма / вывод:

this.nodes = [
 {
   id: 1,
   name: 'root1',
   children: [
     { id: 2, name: 'child1' },
     { id: 3, name: 'child2' }
   ]
 }, ....

Моя текущая форма:

[{
   id: 1,
   name: 'root1',
   name2: [{
         id: 2,
         name: 'child1'
      },
      {
         id: 3,
         name: 'child2',
         name3: [{
            id: 3,
            name: 'child2'
         }],
      },
   ]
}], ...

Как я могу передать свое имя name2 или name3 детям?

1 Ответ

1 голос
/ 27 февраля 2020

У меня есть один толстый лайнер:

const rename = (array) => array.map(item => Object.fromEntries(Object.entries(item).map(([k, v]) => k.match(/name\d+/) ? ['children', rename(v)] : [k, v])));

const nodes = [{
    id: 1,
    name: 'root1',
    name2: [
        {
            id: 2,
            name: 'child1'
        },
        {
            id: 3,
            name: 'child2',
            name3: [
                {
                    id: 3,
                    name: 'child2'
                }
            ],
        },
    ]
}];

const rename = (array) => array.map(item => Object.fromEntries(Object.entries(item).map(([k, v]) => k.match(/name\d+/) ? ['children', rename(v)] : [k, v])));

console.log(JSON.stringify(rename(nodes), null, 4));

// [
//     {
//         "id": 1,
//         "name": "root1",
//         "children": [
//             {
//                 "id": 2,
//                 "name": "child1"
//             },
//             {
//                 "id": 3,
//                 "name": "child2",
//                 "children": [
//                     {
//                         "id": 3,
//                         "name": "child2"
//                     }
//                 ]
//             }
//         ]
//     }
// ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...