Object.entries()mengembalikan array yang elemen-elemennya adalah array yang sesuai dengan [key, value]pasangan properti enumerable yang ditemukan langsung object. Urutan properti adalah sama dengan yang diberikan dengan mengulangi nilai properti objek secara manual.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Description
The Object.entrieskembali fungsi hampir output yang tepat yang Anda minta, kecuali tombol yang string bukan angka.
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));
Jika Anda membutuhkan kunci untuk menjadi angka, Anda bisa memetakan hasilnya ke array baru dengan fungsi panggilan balik yang menggantikan kunci di setiap pasangan dengan nomor yang dipaksakan darinya.
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));
Saya menggunakan fungsi panah dan Object.assignuntuk callback peta dalam contoh di atas sehingga saya dapat menyimpannya dalam satu instruksi dengan memanfaatkan fakta yang Object.assignmengembalikan objek yang ditugaskan, dan nilai pengembalian fungsi panah instruksi tunggal adalah hasil dari instruksi.
Ini setara dengan:
entry => {
entry[0] = +entry[0];
return entry;
}
Seperti yang disebutkan oleh @TravisClarke di komentar, fungsi peta dapat disingkat menjadi:
entry => [ +entry[0], entry[1] ]
Namun, itu akan membuat array baru untuk setiap pasangan nilai kunci, alih-alih mengubah array yang ada di tempat, karenanya menggandakan jumlah array pasangan nilai kunci yang dibuat. Meskipun larik entri asli masih dapat diakses, entri dan tidak akan menjadi sampah yang dikumpulkan.
Sekarang, meskipun menggunakan metode in-place kami masih menggunakan dua array yang menahan pasangan nilai kunci (input dan output array), jumlah total array hanya berubah satu. Input dan output array sebenarnya tidak diisi dengan array, melainkan referensi ke array dan referensi tersebut memakan jumlah ruang yang dapat diabaikan.
- Memodifikasi setiap pasangan nilai kunci di tempat menghasilkan jumlah pertumbuhan memori yang dapat diabaikan, tetapi mengharuskan mengetik beberapa karakter lagi.
- Membuat array baru untuk setiap pasangan nilai kunci menghasilkan dua kali lipat jumlah memori yang diperlukan, tetapi membutuhkan mengetik beberapa karakter lebih sedikit.
Anda bisa melangkah lebih jauh dan menghilangkan pertumbuhan dengan memodifikasi array entri di tempat alih-alih memetakannya ke array baru:
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. Jika Anda ingin menggunakan string sebagai kunci Anda, ubah pengembalian dari[Number(key), obj[key]]ke[key, obj[key]]atau gunakanObject.entriessebagai @Pila yang disarankan dalam jawaban mereka