2015-04-22 23 views
5

Sto provando a fare un merging di oggetti con lodash in node.js. L'unione funziona benissimo nel fatto che non sovrascriverà oggetti di proprietà che risultano indefiniti.interno come merge in lodash

Tuttavia, mi piacerebbe che i mezzi consentissero solo di sovrascrivere gli oggetti presenti nell'oggetto di destinazione. Vedere il seguente esempio:

var e1 = { 
    name: 'Jack', 
    surname: 'Root' 
}; 

fondersi con

var e2 = { 
    name: 'Rex', 
    surname: undefined, 
    age: 24 
}; 

risultato attuale:

{ 
    name: 'Rex', 
    surname: 'Root', 
    age: 24 
} 

risultato vorrei:

{ 
name: 'Rex', 
surname: 'Root' 
} 

Quindi quello che sto cercando di ottenere è per l'oggetto di origine solo sovrascrivere propert quelli che esistono in entrambi e solo se non sono indefiniti.

Ho provato a cercare per altre funzioni, ma solo trovato fondono e assegnare a fare cose simili. Ma purtroppo non è esattamente quello che volevo.

L'idea alla base di questo è di costruire un metodo che otterrà i campi degli oggetti da un modulo Web e quindi li legherà a un oggetto modello mongoose.js per la persistenza.

Questo per evitare di dover sempre associare manualmente ciascuna proprietà a un altro oggetto.

risposta

3

non riuscivo a capire un modo molto conveniente per fare questo con i metodi lodash, ma non è troppo difficile da fare con la vaniglia:

// Only loop over e1 values 
for (var e1k in e1) { 
    // Use e2 value if it exists, otherwise stick with what is already there 
    e1[e1k] = e2[e1k] || e1[e1k]; 
} 
+0

Molto bello !! Semplice ed efficace. Potrebbe anche ridimensionare questo per persino approfondire le proprietà del bambino. –

3

Si potrebbe utilizzare _.mapValues:

var e1 = { 
    name: 'Jack', 
    surname: 'Root' 
}; 
var e2 = { 
    name: 'Rex', 
    surname: undefined, 
    age: 24 
}; 

var result = _.mapValues(e1, function (n, e) { 
    return e2[e] || n; 
}); 
console.log(result); 
+0

Fantastico. Questa risposta è altrettanto buona. Grazie. –