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?

War es hilfreich?

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 ObjectEigentum, das nicht existiert, Sie bekommen undefined.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top