jquery / javascript - valeurs qui existent en écrasant
-
27-10-2019 - |
Question
J'ai quelque chose de similaire à ceci:
...
meta: {
'orderby' : 'firstname',
'page' : 1,
'per' : 10
}
...
Quand je reçois envoyer la demande à l'aide ajax, une partie de ma réponse contient certaines de ces données méta. Donc, j'Ecraser avec les nouveautés. Le serveur peut envoyer quelque chose comme:
meta: {
'page' : 1,
'per' : 10
}
Le problème est qu'il écrase la touche orderby
être undefined
. Je ne veux pas avoir le serveur principal envoyer tout, comment puis-je laisser la valeur d'une clé si la clé ne renvoyée?
La solution
Comme vous l'avez dit que vous utilisez jQuery, vous pouvez utiliser sa fonction extend
:
jQuery.extend(originalMeta, returnedMeta);
Cela ne fera que les propriétés Ecraser dans la cible (originalMeta
, au-dessus) avec des propriétés de la source (returnedMeta
dans ce qui précède) qui existent réellement. (Pas besoin d'affecter le résultat de la fonction à originalMeta
, il est modifié en place.)
Il est aussi facile morte sans compter sur jQuery:
var name;
for (name in returnedMeta) {
if (returnedMeta.hasOwnProperty(name)) {
originalMeta[name] = returnedMeta[name];
}
}
qui utilise une boucle de for..in
à boucle par tous (dénombrables) properites sur returnedMeta
, filtres toute hérite de son prototype (il n'a probablement pas reçu en héritage, mais ...), et pour ceux qui existent copie les valeurs en originalMeta
.
Autres conseils
Vous pouvez utiliser extend()
.
var meta = $.extend(meta, {
'page': 1,
'per': 10
});
T.J. Crowder que l'objet du premier argument est modifié, pas besoin de retour (si elle fonctionnera aussi bien).
Le problème est qu'il écrase la touche orderby être définie
Il ne remplace pas la propriété, elle écrasera toute Object
. Lorsque vous accédez à la propriété d'un Object
qui n'existe pas, vous obtenez undefined
.