Saya ingin mendapatkan kunci dari objek JavaScript sebagai array, baik dalam jQuery atau JavaScript murni.
Apakah ada cara yang kurang bertele-tele dari ini?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
javascript
ecmascript-5
Richard
sumber
sumber
if(foo.hasOwnProperty(key))
, itulah yang akan saya lakukan. Atau, gunakan$.map
.for var in x
loopJawaban:
Gunakan
Object.keys
:Ini adalah fitur ES5. Ini berarti ia berfungsi di semua browser modern tetapi tidak akan berfungsi di browser lawas .
ES5-shim memiliki implementasi
Object.keys
yang dapat Anda curisumber
Anda dapat menggunakan jQuery's
$.map
.sumber
each
, jika Anda melakukan sesuatu dengan mereka.$.each(foo, function(index, value){/* do something with index */});
Tentu saja,
Object.keys()
adalah cara terbaik untuk mendapatkan kunci Object. Jika itu tidak tersedia di lingkungan Anda, itu dapat shimmed sepele menggunakan kode seperti dalam contoh Anda (kecuali Anda harus mempertimbangkan loop Anda akan beralih ke semua properti di rantai prototipe, tidak sepertiObject.keys()
perilaku).Namun, kode contoh Anda ...
jsFiddle .
... dapat dimodifikasi. Anda dapat melakukan tugas tepat di bagian variabel .
jsFiddle .
Tentu saja, perilaku ini berbeda dengan apa yang
Object.keys()
sebenarnya dilakukan ( jsFiddle ). Anda cukup menggunakan shim pada dokumentasi MDN .sumber
var keys = [], i = 0; for (keys[i++] in foo) {}
+1hasOwnProperty()
diperiksa, tentunya?Saya tidak tahu tentang lebih sedikit verbose tetapi saya terinspirasi untuk memaksa berikut ini ke satu baris dengan permintaan satu-liner, tidak tahu seberapa Pythonic itu;)
sumber
var enumerableKeysOnThePrototypeChain
;)for (keys[i++] in foo) {}
) meskipun, karena Anda masih melakukanArray.push()
(belum lagi mendeklarasikan seluruh fungsi). Implementasi pythonic harus mengandalkan sebanyak mungkin pada pemahaman implisit mungkin, dan gagal itu, menggunakan ekspresi lambda.Jika Anda di sini mencari sesuatu untuk mendaftar kunci-kunci objek bersarang n-depth sebagai array datar:
sumber
Ringkasan
Untuk mendapatkan semua kunci dari Obyek yang dapat Anda gunakan
Object.keys()
.Object.keys()
mengambil objek sebagai argumen dan mengembalikan array semua kunci.Contoh:
Pada contoh di atas kita menyimpan array kunci di const kunci. Kami kemudian dapat dengan mudah mengakses jumlah properti pada objek dengan memeriksa panjang array kunci.
Mendapatkan nilai dengan:
Object.values()
Fungsi komplementer
Object.keys()
adalahObject.values()
. Fungsi ini mengambil objek sebagai argumen dan mengembalikan array nilai. Sebagai contoh:sumber
Jika Anda memutuskan untuk menggunakan Underscore.js sebaiknya Anda lakukan
sumber