#javascript #lodash
Вопрос:
Я знаю, как это сделать, используя собственный объект.записи и функцию редуктора. Но можно ли заменить это функцией lodash?
const object = {
foo: 'bar',
baz: undefined,
}
const nulledObject = Object.entries(object).reduce(
(acc, [key, value]) => ({
...acc,
[key]: typeof value === 'undefined' ? null : value,
}),
{}
);
// {
// foo: 'bar',
// baz: null,
// }
Мое желание было бы чем-то вроде:
_cloneWith(object, (value) => (typeof value === 'undefined' ? null : value));
Комментарии:
1. Ваш код создает совершенно новый объект на каждой итерации
.reduce()
, копируя все свойства, накопленные до сих пор. Вместо этого вы могли бы просто установитьacc[key]
по мере необходимости и вернутьсяacc
.2. Ты пробовал
_.reduce()
?
Ответ №1:
Я думаю _.assignWith
, это то, что вы ищете:
const nulledObject = _.assignWith({}, object,
(_, value) => typeof value == 'undefined' ? null : value);
Ответ №2:
Я нашел другое решение после публикации этого вопроса:
const nulledObject = _.mapValues(object,
(value) => (value === undefined ? null : value));