Преобразование объекта точечной нотации javascript во вложенный объект

Я пытаюсь построить функцию, которая бы расширяла объект типа :

{
    'ab.cd.e' : 'foo',
    'ab.cd.f' : 'bar',
    'ab.g' : 'foo2'
}

Во вложенный объект :

{ab: {cd: {e:'foo', f:'bar'}, g:'foo2'}}

Как эта функция php : Set::expand()

Без использования eval конечно.

14
задан Kara 15 August 2017 в 17:27
поделиться

1 ответ

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

function setValue(object, path, value) {
    var keys = path.split('.'),
        last = keys.pop();

    keys.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
    return object;
}

var source = { 'ab.cd.e': 'foo', 'ab.cd.f': 'bar', 'ab.g': 'foo2' },
    target = Object
        .entries(source)
        .reduce((o, [k, v]) => setValue(o, k, v), {});

console.log(target);
1
ответ дан 1 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: