Мне нужно сделать что-то вроде _.assign, но только если целевой объект уже имеет назначенное свойство. Подумайте об этом, так как исходные объекты могут иметь некоторые свойства для внесения вклада, но также некоторые свойства, которые я не хочу смешивать.
Я никогда не использовал механизм обратного вызова _.assign, но попробовал следующее. Он "работал", но он по-прежнему привязывал свойство к объекту dest (как undefined). Я не хочу, чтобы он вообще назначался.
_.assign(options, defaults, initial, function (destVal, sourceVal) {
return typeof destVal == 'undefined' ? undefined : sourceVal;
});
Я написал для этого следующую функцию, но задаюсь вопросом, есть ли у lodash уже что-то испеченное, более элегантное.
function softMerge (dest, source) {
return Object.keys(dest).reduce(function (dest, key) {
var sourceVal = source[key];
if (!_.isUndefined(sourceVal)) {
dest[key] = sourceVal;
}
return dest;
}, dest);
}