Object.entries()
zwraca tablicę, której elementy są tablicami odpowiadającymi wymiennym [key, value]
parom właściwości znalezionym bezpośrednio na object
. Kolejność właściwości jest taka sama, jak podana przez ręczne zapętlenie wartości właściwości obiektu.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Description
Że Object.entries
funkcja zwraca niemal dokładna wyjście pytasz za wyjątkiem klawiszy są ciągi zamiast numerów.
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));
Jeśli potrzebujesz, aby klucze były cyframi, możesz odwzorować wynik na nową tablicę z funkcją wywołania zwrotnego, która zastępuje klucz w każdej parze liczbą wymuszoną z niego.
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));
Używam funkcji strzałki i Object.assign
do wywołania zwrotnego mapy w powyższym przykładzie, dzięki czemu mogę zachować ją w jednej instrukcji, wykorzystując fakt, że Object.assign
zwraca obiekt, do którego jest przypisany, a wartość zwracana przez funkcję pojedynczej instrukcji jest wynikiem instrukcji.
Jest to równoważne z:
entry => {
entry[0] = +entry[0];
return entry;
}
Jak wspomniano w komentarzach @TravisClarke, funkcję mapy można skrócić do:
entry => [ +entry[0], entry[1] ]
Jednak stworzyłoby to nową tablicę dla każdej pary klucz-wartość, zamiast modyfikować istniejącą tablicę w miejscu, podwajając liczbę utworzonych tablic pary klucz-wartość. Chociaż tablica oryginalnych wpisów jest nadal dostępna, to i jej wpisy nie będą usuwane.
Teraz, mimo że nasza metoda lokalna nadal używa dwóch tablic, które przechowują pary klucz-wartość (tablice wejściowa i wyjściowa), całkowita liczba tablic zmienia się tylko o jeden. Tablice wejściowe i wyjściowe nie są tak naprawdę wypełnione tablicami, ale raczej referencje do tablic i te referencje zajmują mało miejsca w pamięci.
- Modyfikacja każdej pary klucz-wartość w miejscu powoduje nieznaczny wzrost pamięci, ale wymaga wpisania kilku dodatkowych znaków.
- Utworzenie nowej tablicy dla każdej pary klucz-wartość powoduje podwojenie wymaganej ilości pamięci, ale wymaga wpisania kilku mniej znaków.
Możesz pójść o krok dalej i całkowicie wyeliminować wzrost, modyfikując tablicę wpisów w miejscu zamiast mapować ją na nową tablicę:
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
zamiast tego wróci . Jeśli chcesz używać ciągów jako kluczy, zmień zwrot z[Number(key), obj[key]]
na[key, obj[key]]
lub skorzystaj zObject.entries
sugestii @Pila w odpowiedzi