Saya ingin mengonversi objek seperti ini:
{"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}
ke dalam array pasangan kunci-nilai seperti ini:
[[1,5],[2,7],[3,0],[4,0]...].
Bagaimana saya bisa mengonversi Objek ke Array pasangan nilai kunci dalam JavaScript?
javascript
arrays
type-conversion
Soptareanu Alex
sumber
sumber
NaN
. Jika Anda ingin menggunakan string sebagai kunci Anda, ubah pengembalian dari[Number(key), obj[key]]
ke[key, obj[key]]
atau gunakanObject.entries
sebagai @Pila yang disarankan dalam jawaban merekaCara terbaik adalah melakukan:
Panggilan
entries
, seperti yang ditunjukkan di sini, akan mengembalikan[key, value]
pasangan, seperti yang diminta penanya.Atau, Anda bisa menelepon
Object.values(obj)
, yang hanya akan mengembalikan nilai.sumber
The
Object.entries
kembali fungsi hampir output yang tepat yang Anda minta, kecuali tombol yang string bukan angka.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.
Saya menggunakan fungsi panah dan
Object.assign
untuk callback peta dalam contoh di atas sehingga saya dapat menyimpannya dalam satu instruksi dengan memanfaatkan fakta yangObject.assign
mengembalikan objek yang ditugaskan, dan nilai pengembalian fungsi panah instruksi tunggal adalah hasil dari instruksi.Ini setara dengan:
Seperti yang disebutkan oleh @TravisClarke di komentar, fungsi peta dapat disingkat menjadi:
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.
Anda bisa melangkah lebih jauh dan menghilangkan pertumbuhan dengan memodifikasi array entri di tempat alih-alih memetakannya ke array baru:
sumber
Object.entries(obj).map(e => [+e[0], e[1]]);
Untuk merangkum beberapa jawaban ini sekarang pada 2018, di mana ES6 adalah standar.
Dimulai dengan objek:
Metode terakhir ini, bisa juga mengatur ulang susunan array tergantung nilai kunci. Terkadang ini bisa menjadi perilaku yang diinginkan (terkadang tidak). Tetapi keuntungannya sekarang adalah bahwa nilai-nilai diindeks pada slot array yang benar, penting dan sepele untuk melakukan pencarian di atasnya.
Terakhir (bukan bagian dari pertanyaan awal, tetapi untuk kelengkapan), jika Anda perlu mencari dengan mudah menggunakan kunci atau nilainya, tetapi Anda tidak ingin array jarang, tidak ada duplikat dan pemesanan ulang tanpa perlu mengkonversi ke kunci numerik ( bahkan dapat mengakses kunci yang sangat kompleks), maka array (atau objek) bukanlah yang Anda butuhkan. Saya akan merekomendasikan
Map
sebagai gantinya:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
sumber
Namun solusi lain jika
Object.entries
tidak akan berhasil untuk Anda.sumber
Dalam Ecmascript 6,
biola
sumber
.map((value)=>(value))
porsinya tidak berarti - itu hanya mengembalikan entri-array yang persis sama dengan yang diperoleh dariObject.entries(obj)
panggilan.Gunakan
Object.keys
danArray#map
metode.sumber
Gunakan
Object.entries
untuk mendapatkan setiap elemen Objek dalamkey & value
format, lalumap
melalui mereka seperti ini:Tetapi, jika Anda yakin bahwa kunci akan dalam urutan progresif Anda dapat menggunakan
Object.values
danArray#map
melakukan sesuatu seperti ini:sumber
Jika Anda menggunakan lodash, bisa sesederhana ini:
sumber
Dengan lodash, selain jawaban yang diberikan di atas, Anda juga dapat memiliki kunci di larik keluaran.
Tanpa kunci objek di larik output
untuk:
Jika obj adalah sebagai berikut:
Maka array akan menjadi:
Dengan kunci objek di larik output
Jika Anda menulis sebagai gantinya ('genre' adalah string yang Anda pilih):
Kamu akan mendapatkan:
sumber
Saya akan menyarankan solusi paling sederhana ini untuk digunakan
Object.entries()
sumber
Anda dapat menggunakan
Object.values([])
, Anda mungkin memerlukan polyfill ini jika Anda belum:https://stackoverflow.com/a/54822153/846348
Maka Anda bisa melakukan:
Hanya ingat bahwa array dalam js hanya dapat menggunakan kunci numerik jadi jika Anda menggunakan sesuatu yang lain dalam objek maka mereka akan menjadi `0,1,2 ... x``
Berguna untuk menghapus duplikat misalnya jika Anda memiliki kunci unik.
sumber
Gunakan untuk dalam
sumber
Konversi objek rekursif ke array
sumber
Kami dapat mengubah jenis Nomor ke String untuk Kunci seperti di bawah ini:
sumber
sumber
Ini adalah implementasi barebone sederhana saya:
sumber
Solusi sederhana
`
sumber
Anda dapat menggunakan _.castArray (obj) .
contoh:
_.castArray({ 'a': 1 }); // => [{ 'a': 1 }]
sumber