превратить массив строк в глубокий объект

допустим есть массив строк['kitchen', 'angle', 'leftSide']

как создать функцию, которая принимая этот массив, возвращает объект с такой структурой:

{
    kitchen: {
        angle: {
            leftSide: null
        }
    }
}

ВАЖНО! Количество строк в массиве может быть разной, функция должна принимать одномерный массив строк с любым количеством элементов.


Ответы (2 шт):

Автор решения: Алексей Шиманский

let arr = ['kitchen', 'angle', 'leftSide'];
let obj = o = {};

arr.forEach(key => {o = o[key] = {}});

console.log(obj);


let test = ['kitchen', 'angle', 'leftSide'];
let last;

let obj = test.reduce((o, val) => {
  if (typeof last == 'object')
    last = last[val] = {};
  else
    last = o[val] = {};

  return o;
}, {});

console.log(obj);

→ Ссылка
Автор решения: Aziz Umarov

Причин для холивара нет, но по условию вернее этот ответ.

leftSide: null

let arr = ['kitchen', 'angle', 'leftSide'];

let result = arr.reverse().reduce((acc, item)=> { acc = {[item]: acc? {...acc} : null}; return acc;}, null)

console.log(result);

ну или более короткий аналог

let result = ['kitchen', 'angle', 'leftSide'].reverse().reduce((a,i)=>({[i]:a||null}),null);

console.log(result);

→ Ссылка