Object.entries()
Gibt ein Array zurück, dessen Elemente Arrays sind, die den aufzählbaren Eigenschaftspaaren entsprechen, die [key, value]
direkt gefunden wurden object
. Die Reihenfolge der Eigenschaften entspricht der Reihenfolge, in der die Eigenschaftswerte des Objekts manuell durchlaufen werden.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Description
Die Object.entries
Funktion gibt fast genau die Ausgabe zurück, nach der Sie fragen, außer dass die Tasten Zeichenfolgen anstelle von Zahlen sind.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
console.log(Object.entries(obj));
Wenn die Schlüssel Zahlen sein müssen, können Sie das Ergebnis einem neuen Array mit einer Rückruffunktion zuordnen, die den Schlüssel in jedem Paar durch eine daraus erzwungene Zahl ersetzt.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(input);
return entries.map(entry => Object.assign(entry, { 0: +entry[0] }));
}
console.log(toNumericPairs(obj));
Ich verwende eine Pfeilfunktion und Object.assign
für den Map-Rückruf im obigen Beispiel, damit ich sie in einer Anweisung behalten kann, indem ich die Tatsache nutze, dass Object.assign
das zugewiesene Objekt zurückgegeben wird, und der Rückgabewert einer einzelnen Anweisungspfeilfunktion ist das Ergebnis der Anweisung.
Dies entspricht:
entry => {
entry[0] = +entry[0];
return entry;
}
Wie von @TravisClarke in den Kommentaren erwähnt, könnte die Kartenfunktion verkürzt werden auf:
entry => [ +entry[0], entry[1] ]
Dies würde jedoch ein neues Array für jedes Schlüssel-Wert-Paar erstellen, anstatt das vorhandene Array an Ort und Stelle zu ändern, wodurch die Anzahl der erstellten Schlüssel-Wert-Paar-Arrays verdoppelt würde. Während auf das ursprüngliche Eintragsarray noch zugegriffen werden kann, werden es und seine Einträge nicht durch Müll gesammelt.
Obwohl bei Verwendung unserer In-Place-Methode immer noch zwei Arrays verwendet werden, die die Schlüssel-Wert-Paare enthalten (das Eingabe- und das Ausgabearray), ändert sich die Gesamtzahl der Arrays nur um eins. Die Eingabe- und Ausgabearrays sind nicht wirklich mit Arrays gefüllt, sondern Verweise auf Arrays und diese Verweise nehmen einen vernachlässigbaren Speicherplatz ein.
- Das Ändern jedes Schlüssel-Wert-Paares an Ort und Stelle führt zu einem vernachlässigbaren Speicherwachstum, erfordert jedoch die Eingabe einiger weiterer Zeichen.
- Das Erstellen eines neuen Arrays für jedes Schlüssel-Wert-Paar führt zu einer Verdoppelung des erforderlichen Speicherplatzes, erfordert jedoch die Eingabe einiger weniger Zeichen.
Sie können noch einen Schritt weiter gehen und das Wachstum insgesamt eliminieren, indem Sie das Eintragsarray an Ort und Stelle ändern, anstatt es einem neuen Array zuzuordnen:
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(obj);
entries.forEach(entry => entry[0] = +entry[0]);
return entries;
}
console.log(toNumericPairs(obj));
NaN
stattdessen zurück , wenn versucht wird, Ihren Schlüssel in eine Zahl umzuwandeln . Wenn Sie Zeichenfolgen als Schlüssel verwenden möchten, ändern Sie die Rückgabe von[Number(key), obj[key]]
auf[key, obj[key]]
oder verwenden Sie dasObject.entries
in der Antwort vorgeschlagene