essentiellement je devrait se retrouver avec: p> sans ces éléments supplémentaires dans le deuxième objet. p> J'ai essayé cela, mais cela renvoie toujours les clés supplémentaires que je n'ai pas Vous voulez: p>
4 Réponses :
Vous pouvez utiliser p> objet.Assign () code> ou ES6 Spread opérateur pour créer un nouvel objet
let profile= {
first_name: "John",
last_name: "Doe",
avatar: "https://image.cdn.com",
key1: 1,
key2: 2,
key: 3,
}
let form= {
first_name: "Adam",
last_name: "",
avatar: ""
}
const output = Object.keys(form).reduce((prev, key) => {
prev[key] = form[key] || profile[key];
return prev;
}, {});
console.log(output);
Cela a toujours toutes les clés supplémentaires dans le résultat, qu'ils ne veulent pas i>.
Nope, je ne veux pas de fusion. Cela fait une fusion.
@Aligajani j'ai mis à jour la réponse, voir la deuxième partie
Vous pouvez utiliser p> objet.keys () code> et
array.reduce () code> à itérer sur l'objet
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Ça a l'air bien, essayant de trouver le moyen le plus rapide, cependant. Obtenu un gros objet ici.
Afaik, méthodes telles que array.reduce () code>,
array.map () code> etc. sont très optimisés. Par conséquent, la performance de la boucle ne devrait pas être un problème. Peut-être que vous pouvez essayer des sites de référence
Merci Harun. Toute idée si je peux atteindre la même chose avec Lodash, juste curieux.
Je viens de regarder sa documentation mais je n'ai pas trouvé de méthode d'intersection intégrée pour les objets. BTW, vous pouvez vérifier cela si un thread sur: Stackoverflow.com/a/34392937/1331040
J'ai mis à jour la réponse pour accomplir la même chose avec _. Intersection () code> et
objet.keys () code>. J'espère que cela vous donne un indice.
Merci. Semble intéressant.
Vous pouvez saisir les touches d'un objet en utilisant objet.keys () code>
, puis .map () code>
ces clés à un objet, qui utilise la clé de la carte comme clé de l'objet et de la valeur de l'autre. objet pour cette clé donnée comme valeur pour l'objet. Ensuite, utilisez Object.Assign () code>
pour créer un objet à partir de cette matrice d'objets:
p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
_. Pick (profil, _.Keys (formulaire)); code> le gagne pour moi. Bravo!
Une solution simple crée votre propre fonction de fusion (mais pour vérifier votre besoin réel .. par exemple. Si sur la variable de formulaire, un attributs n'est pas vide. Quelle valeur va gagner? Mais vous pouvez ajuster mon exemple selon E.G.
function getOnlyExisting(aParam1, aParam2) { var vResult = Object.create(aParam1); for (var vAttributeName in aParam1) { if (aParam2.hasOwnProperty(vAttributeName)) { vResult[vAttributeName] = aParam2[vAttributeName]; } } return vResult; } let profile = { first_name: "John", last_name: "Doe", avatar: "https://image.cdn.com", key1: 1, key2: 2, key: 3, } let form = { first_name: "", last_name: "", avatar: "" } console.log(getOnlyExisting(form, profile));
"J'ai essayé ceci mais cela renvoie toujours les clés supplémentaires que je ne veux pas" i> - vous ne voulez pas vraiment de Fusionner i> de commencer.