0
votes

Comment fusionner deux objets telles que les clés d'une carte aux valeurs d'une autre, sans les clés supplémentaires dans la seconde, en utilisant le dernier JavaScript?

objet A : xxx

objet b xxx

essentiellement je devrait se retrouver avec: xxx

sans ces éléments supplémentaires dans le deuxième objet.

J'ai essayé cela, mais cela renvoie toujours les clés supplémentaires que je n'ai pas Vous voulez: xxx


1 commentaires

"J'ai essayé ceci mais cela renvoie toujours les clés supplémentaires que je ne veux pas" - vous ne voulez pas vraiment de Fusionner de commencer.


4 Réponses :


1
votes

Vous pouvez utiliser objet.Assign () code> ou ES6 Spread opérateur pour créer un nouvel objet

p>

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);


3 commentaires

Cela a toujours toutes les clés supplémentaires dans le résultat, qu'ils ne veulent pas .


Nope, je ne veux pas de fusion. Cela fait une fusion.


@Aligajani j'ai mis à jour la réponse, voir la deuxième partie



2
votes

Vous pouvez utiliser objet.keys () code> et array.reduce () code> à itérer sur l'objet

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>


6 commentaires

Ç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 () , array.map () 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 () et objet.keys () . J'espère que cela vous donne un indice.


Merci. Semble intéressant.



2
votes

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>


1 commentaires

_. Pick (profil, _.Keys (formulaire)); le gagne pour moi. Bravo!



0
votes

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));


0 commentaires