Как преобразовать массив во вложенные объекты в JavaScript - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь сгенерировать вложенный объект из вложенного массива, используя JavaScript. Но пока не удалось добиться успеха.

Ниже приведен пример массива.

let arr = [
      '25',
      '25_29',
      '25_28',
      '25_28_35',
      '25_28_35_36',
      '20',
      '20_27',
      '20_26',
      '18',
      '18_48',
      '59',
      '34'
    ];

Ниже приведен пример объекта.

let Obj = {
      25: {
        key: 25,
        child: {
          29: {
            key: 29, child: {}
          },
          28: {
            key: 28,
            child: {
              key: 35,
              child: {
                key: 36,
                child: {}
              }
            }
          }
        }
      },
      20: {
        key: 20,
        child: {
          27: {
            key: 27,
            child: {}
          },
          26: {
            key: 26,
            child: {}
          }
        }
      }
    }

Есть ли возможность сделать то же самое?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Вы можете разделить путь и уменьшить ключи.

var array = ['25', '25_29', '25_28', '25_28_35', '25_28_35_36', '20', '20_27', '20_26', '18', '18_48', '59', '34'],
    result = array.reduce((r, s) => {
        s.split('_').reduce((o, key) => (o[key] = o[key] || { key, child: {} }).child, r);
        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2 голосов
/ 01 ноября 2019

let arr = ['25', '25_29', '25_28', '25_28_35', '25_28_35_36', '20', '20_27', '20_26', '18', '18_48', '59', '34'];

let obj = arr.reduce((obj, v) => {
  let keys = v.split('_');
  let o = obj;
  keys.forEach(key => {
    o[key] = o[key] || {key, child: {}};
    o = o[key].child;
  });
  return obj;
}, {});

console.log(obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...