Лодаш, как установить значение в нескольких путях - PullRequest
1 голос
/ 11 марта 2019

Я смотрю на функции _set и _setWith в lodash, но мне нужно иметь возможность использовать аргумент catch all.

object = {"root": {"a": null, "b": null, "c": null}}};
path = ["root", "*"];
_.set(object, path, 1);

console.log(object)
>>> {"root": {"a": 1, "b": 1, "c": 1}}}

Я показал это только с одним *но мне также нужно, чтобы он работал, если путь имел несколько, например ["root", "*", "*"]

Ответы [ 2 ]

1 голос
/ 11 марта 2019

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

function setValue(object, [key, ...rest], value) {
    if (key === '*') {
        Object.keys(object).forEach(rest.length
            ? k => setValue(object[k], rest, value)
            : k => object[k] = value
        );
        return;
    }
    if (rest.length) {
        setValue(object[key], rest, value);
        return;
    }
    object[key] = value;
}

var object = { root: { a: null, b: null, c: null } },
    path = ["root", "*"];

setValue(object, path, 1);

console.log(object);
0 голосов
/ 11 марта 2019

Вы не можете сделать практически рекурсивный набор с _.set.

. Вы можете использовать _.mergeWith и написать свой собственный настройщик.

Ссылка на mergeWith .

...