Создание динамического вложенного объекта из массива свойств

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

var array = ['opt1','sub1','subsub1','subsubsub1']

Из этого я хочу сгенерировать следующие объекты:

{
  opt1:{
    sub1:{
      subsub1:{
        subsubsub1:{}
      }
    }
  }
}

У меня есть способ сделать это, создав строку и используя eval, но я хочу избежать этой идеи?

Ответ 1

Вы можете использовать reduce:

var array = ['opt1','sub1','subsub1','subsubsub1'];
var object = {};
array.reduce(function(o, s) { return o[s] = {}; }, object);
console.log(object);

Ответ 2

вы можете использовать lodash установить функцию

_.set(yourObject, 'a.b.c')

Ответ 3

Вы можете использовать reduceRight, чтобы преобразовать массив в цепочку объектов:

const array = ['a', 'b', 'c'];
const object = array.reduceRight((obj, next) => ({[next]: obj}), {});

// Example:
console.log(object); // {"a":{"b":{"c":{}}}}