Ich habe ein Objekt, das Warnungen und einige Informationen darüber enthält:
var alerts = {
1: { app: 'helloworld', message: 'message' },
2: { app: 'helloagain', message: 'another message' }
}
Darüber hinaus habe ich eine Variable, die angibt, wie viele Warnungen es gibt alertNo
. Meine Frage ist, ob ich beim Hinzufügen einer neuen Warnung eine Möglichkeit habe, die Warnung an das alerts
Objekt anzuhängen .
javascript
Steve Gattuso
quelle
quelle
Antworten:
Wie wäre es, wenn Sie die Warnungen als Datensätze in einem Array anstelle der Eigenschaften eines einzelnen Objekts speichern?
Und um dann eine hinzuzufügen, verwenden Sie einfach
push
:quelle
alerts[3] = { app: 'hello3', message: 'message 3' }
. Damit können Sie über die ID auf eine Nachricht zugreifen :alerts[2] => { app: 'helloworld', message: 'message' }
. Die Länge zu bekommen ist dann nur:Object.keys(alerts).length
(das Bit ist einfacher mit Arrays)jQuery
$.extend(obj1, obj2)
würde 2 Objekte für Sie zusammenführen, aber Sie sollten wirklich ein Array verwenden.quelle
Sie können dies mit Object.assign () tun . Manchmal benötigen Sie ein Array, aber wenn Sie mit Funktionen arbeiten, die ein einzelnes JSON-Objekt erwarten, z. B. einen OData-Aufruf, ist diese Methode einfacher als das Erstellen eines Arrays nur zum Entpacken.
BEARBEITEN: Um den Kommentar zum Abrufen des nächsten Schlüssels zu beantworten , können Sie mit der Funktion Object.keys () ein Array der Schlüssel abrufen. Ein Beispiel für das Inkrementieren des Schlüssels finden Sie in der Antwort von Vadi. Ebenso können Sie alle Werte mit Object.values () und Schlüssel-Wert-Paare mit Object.entries () abrufen .
quelle
Wie in anderen Antworten erwähnt, fällt es Ihnen möglicherweise leichter, mit einem Array zu arbeiten.
Wenn nicht:
Versuch es:
https://jsbin.com/yogimo/edit?js,console
quelle
while(alerts[size]) size++;
und wahrscheinlich umbenennensize
innewId
.Sie können die Spread-Syntax wie folgt verwenden.
quelle
Jetzt haben wir mit ES6 einen sehr leistungsfähigen Spread-Operator (... Object), der diese Arbeit sehr einfach machen kann. Dies kann wie folgt erfolgen:
Das ist es. Es wird der gewünschte Schlüssel hinzugefügt. Hoffe das hilft!!
quelle
Sie sollten sich wirklich an die Reihe der Warnungsvorschläge halten, aber ansonsten würde das Hinzufügen zu dem von Ihnen erwähnten Objekt folgendermaßen aussehen:
Aber da sollten Sie keine wörtlichen Zahlen verwenden, da Namen alles zitieren und mitgehen
oder Sie können daraus ein Array von Objekten machen.
Der Zugriff darauf sieht so aus
quelle
Haben Sie die Möglichkeit, die äußerste Struktur in ein Array zu ändern? So würde es aussehen
Wenn Sie also eines hinzufügen müssen, können Sie es einfach auf das Array übertragen
Dann haben Sie einen eingebauten nullbasierten Index für die Aufzählung der Fehler.
quelle
Viel einfacher mit ES6:
quelle
Alternativ kann in ES6 die Spread-Syntax verwendet werden.
${Object.keys(alerts).length + 1}
kehrt als nächstesid
zur Warnung zurück.quelle
Es tut mir leid, aber ich kann Ihre Antworten aufgrund meines Rufs nicht kommentieren! ... Wenn Sie also die Struktur Ihres Objekts ändern möchten, müssen Sie das tun , was Thane Plummer sagt, aber einen kleinen Trick, wenn es Ihnen egal ist, wo Um das Element zu platzieren: Es wird an der ersten Position eingefügt, wenn Sie die Nummer für das Einfügen nicht angeben.
Dies ist wunderbar, wenn Sie beispielsweise ein Json-Objekt an einen mongoDB-Funktionsaufruf übergeben und einen neuen Schlüssel in die Bedingungen einfügen möchten, die Sie erhalten. In diesem Fall füge ich ein Element myUid mit einigen Informationen aus einer Variablen in meinen Code ein:
quelle
[Javascript] Nach ein bisschen Jiggery Pokery hat das bei mir funktioniert:
Das Problem, das ich lösen musste, war, dass ich möglicherweise eine beliebige Anzahl von Ereignissen hatte und alle denselben Namen hatten: LastPostedDateTime Alles, was sich unterscheidet, ist das Datum und die Uhrzeit.
quelle
Versuche dies:
Funktioniert ziemlich gut, es wird am Anfang des Arrays hinzugefügt.
quelle