Конвертировать массив во вложенный объект - PullRequest
0 голосов
/ 29 августа 2018

Допустим, у меня есть следующий массив: ['product', 'model', 'version']

И я хотел бы иметь такой объект, как:

{
    product: { 
        model: { 
            version: { 

            }
        }
     }
}

Однако этот массив является динамическим, поэтому он может содержать 2, 3 или менее элементов. Как это может быть достигнуто наиболее эффективным способом?

Спасибо

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Если я правильно понял запрос, этот код может сделать то, что вам нужно:

function convert(namesArray) {
  let result = {};
  let nestedObj = result;
  namesArray.forEach(name => {
    nestedObj[name] = {};
    nestedObj = nestedObj[name];
  });

  return result;
}


console.log(convert(['a', 'b', 'c']));
0 голосов
/ 29 августа 2018

Вы также можете сделать это с Array.prototype.reduceRight:

const result = ['product','model','version'].reduceRight((all, item) => ({[item]: all}), {});

console.log(result);
0 голосов
/ 29 августа 2018

Просто выверните его наизнанку и последовательно оберните внутренний объект во внешний объект:

const keys = ['product', 'model', 'version'];
const result = keys.reverse().reduce((res, key) => ({[key]: res}), {});
//                                   innermost value to start with ^^

console.log(result);
...