JQuery/JavaScript - Überschreibende Werte, die existieren
-
27-10-2019 - |
Frage
Ich habe etwas Ähnliches:
...
meta: {
'orderby' : 'firstname',
'page' : 1,
'per' : 10
}
...
Wenn ich die Anfrage mit AJAX senden kann, enthält ein Teil meiner Antwort einige dieser Meta -Daten. Also überschreibe ich es mit den neuen Sachen. Der Server kann so etwas zurücksenden wie:
meta: {
'page' : 1,
'per' : 10
}
Das Problem ist, dass es das überschreibt orderby
Schlüssel zu sein undefined
. Ich möchte nicht, dass der Server alles zurückschickt. Wie kann ich den Wert eines Schlüssels hinterlassen, wenn der Schlüssel nicht zurückgesendet wird?
Lösung
Wie Sie gesagt haben, Sie verwenden JQuery, können Sie seine verwenden extend
Funktion:
jQuery.extend(originalMeta, returnedMeta);
Das überschreibt nur Eigenschaften im Ziel (originalMeta
, im obigen) mit Eigenschaften aus der Quelle (Quelle (returnedMeta
im obigen) das tatsächlich existieren. (Es ist nicht erforderlich, das Ergebnis der Funktion zuzuordnen originalMeta
, es ist an Ort und Stelle modifiziert.)
Es ist auch tot, ohne sich auf JQuery zu verlassen:
var name;
for (name in returnedMeta) {
if (returnedMeta.hasOwnProperty(name)) {
originalMeta[name] = returnedMeta[name];
}
}
Das verwendet a for..in
Schleifen Sie die Schleife durch alle (aufzählbaren) Richtigkeiten auf returnedMeta
, filtert alle es erbt von seinem Prototyp (es erbt wahrscheinlich keine, aber ...), und für diejenigen, die die Werte existieren originalMeta
.
Andere Tipps
Sie können verwenden extend()
.
var meta = $.extend(meta, {
'page': 1,
'per': 10
});
TJ Crowder Anmerkungen Dass das Objekt des ersten Arguments geändert wird, muss nicht zurückkehren (obwohl es auch funktioniert).
Das Problem ist, dass es den Orderby -Schlüssel überschreibt, um undefiniert zu sein
Es überschreibt die Immobilie nicht, sondern überschreibt die gesamte Object
. Wenn Sie auf einen zugreifen Object
Eigentum, das nicht existiert, Sie bekommen undefined
.