Как создать из массива ключей создать многомерный объект?

Рейтинг: 1Ответов: 2Опубликовано: 03.02.2023

Не знаю как точно описать задачу, поэтому лучше покажу на примере:
допустим есть массив ['first', 'second', 'third'] и значение x;

нужно получить вот такой объект с большой вложенностью:

{
 first: {
   second: {
      third: x
    }
  }
}

Ответы

▲ 1Принят

Для преобразования массива в многомерный объект, можно воспользоываться методом reduceRight

const arrTemplate = ['first', 'second', 'third', '1', '2', '3'];
const x = 'value'

function toObj(arr, z) {
  return arr.reduceRight((acc, item) => ({[item]: acc}), z)
}

console.log(toObj(arrTemplate, x))

▲ 0

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

let keys = ["a", "b", "c", "d"];

let obj = {};

obj[keys.pop()] = 123;

for(key of keys.reverse())
  obj = {[key]: obj}
  
  
console.log(obj);