La mia necessità è di fare qualcosa come un _.assign, ma solo se l'oggetto di destinazione ha già la proprietà assegnata. Pensa che gli oggetti sorgente possano avere alcune proprietà da aggiungere, ma anche alcune proprietà che non voglio mescolare._.assegnare solo se la proprietà esiste nell'oggetto di destinazione
Non ho mai usato il meccanismo di callback di _.assign, ma ho provato quanto segue. Ha funzionato, ma ha comunque assegnato la proprietà all'oggetto dest (come non definito). Non voglio che lo assegni affatto.
_.assign(options, defaults, initial, function (destVal, sourceVal) {
return typeof destVal == 'undefined' ? undefined : sourceVal;
});
Ho scritto la seguente funzione per fare questo, chiedendomi se il lodash ha già qualcosa in più che è più elegante.
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);
}
sarebbe anche interessante vedere come fare questo con l'_.assign o _merge richiamata e/o utilizzando concatenamento. – sparty02
l'esempio finale manca una parentesi chiusa '_.assign (opzioni, _.pick (valori predefiniti, _.keys (opzioni)));' – seangwright