стоит разобраться с методом массива
reduce()
Upd.
reduce()
выполнится для каждой буквы: a, b, c и d.
В функцию аргументом
i
попадает очередная буква.
Аргументом
part
первый раз туда попадает пустой объект
obj
. И ссылка на него сохраняется - её и вернём как результат.
Внутри
reduce
функцию можно так переписать, делает то же самое:
function (part, i) {
const empty = {}; // новая матрёшка
part[i] = empty; // вложили её в предыдущую
return empty; // новая матрёшка станет part'ом при следующем вызове
}