Apakah ada cara yang elegan untuk mengakses properti pertama dari suatu objek ...
- di mana Anda tidak tahu nama properti Anda
- tanpa menggunakan loop like
for .. in
atau jQuery$.each
Misalnya, saya perlu mengakses foo1
objek tanpa mengetahui nama foo1:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
javascript
object
atogle
sumber
sumber
Jawaban:
Dengan ini, Anda juga dapat mengakses properti lain berdasarkan indeks. Sadarilah!
Object.keys
pesanan kembali tidak dijamin sesuai ECMAScript namun secara tidak resmi itu oleh semua implementasi browser utama, silakan baca https://stackoverflow.com/a/23202095 untuk rincian tentang ini.sumber
first()
atau sesuatu yang serupa bisa menangani ini.Coba
for … in
loop dan istirahat setelah iterasi pertama:sumber
Anda juga bisa melakukannya
Object.values(example)[0]
.sumber
Object.keys
, karena Anda dijamin mendapatkan item pertama.Gunakan
Object.keys
untuk mendapatkan array properti pada objek. Contoh:Dokumentasi dan shim lintas-browser disediakan di sini . Contoh penggunaannya dapat ditemukan di salah satu jawaban saya di sini .
Sunting : untuk kejelasan, saya hanya ingin menggemakan apa yang dinyatakan dengan benar dalam jawaban lain: urutan kunci dalam objek javascript tidak ditentukan.
sumber
Versi satu aturan:
sumber
for in
tanpa memeriksahasOwnProperty
karena objek berisi nilai-nilai lain yang tidak diinginkan ditambahkan ke program sehingga Anda akhirnya bisa mendapatkan hasil yang tidak diinginkan dari potongan ini. Hanya karena pendek dan rapi bukan berarti aman optimal.Tidak ada properti "pertama". Kunci objek tidak berurutan.
Jika Anda mengulanginya dengan untuk
(var foo in bar)
Anda akan mendapatkannya dalam beberapa urutan, tetapi mungkin berubah di masa depan (terutama jika Anda menambah atau menghapus kunci lain).sumber
Solusi dengan perpustakaan lodash :
tetapi tidak ada jaminan dari urutan objek penyimpanan internal karena tergantung pada implementasi VM javascript.
sumber
var object = { childIndex: { .. } }; var childObject = _.find(Object);
Tidak. Objek literal, seperti yang didefinisikan oleh MDC adalah:
Oleh karena itu objek literal bukan array, dan Anda hanya dapat mengakses properti menggunakan nama eksplisit atau
for
loop menggunakanin
kata kunci.sumber
Jawaban teratas dapat menghasilkan seluruh array dan kemudian menangkap dari daftar. Berikut ini jalan pintas lain yang efektif
sumber
Ini sudah dibahas di sini sebelumnya.
Konsep pertama tidak berlaku untuk properti objek, dan urutan for ... in loop tidak dijamin oleh spesifikasi, namun dalam praktiknya itu adalah FIFO andal kecuali kritis untuk chrome ( laporan bug ). Buat keputusan sesuai dengan itu.
sumber
Saya tidak menyarankan Anda untuk menggunakan Object.keys karena tidak didukung dalam versi IE lama. Tetapi jika Anda benar-benar membutuhkannya, Anda dapat menggunakan kode di atas untuk menjamin kompatibilitasnya:
Fitur Firefox (Gecko) 4 (2.0) Chrome 5 Internet Explorer 9 Opera 12 Safari 5
Info lebih lanjut: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
Tetapi jika Anda hanya membutuhkan yang pertama, kami dapat mengatur solusi yang lebih pendek seperti:
sumber
Untuk mendapatkan nama kunci pertama dalam objek yang dapat Anda gunakan:
Mengembalikan string, jadi Anda tidak dapat mengakses objek bersarang jika ada, seperti:
var obj = { first: { someVal : { id : 1} };
Di sini dengan solusi itu Anda tidak dapat mengakses id.Solusi terbaik jika Anda ingin mendapatkan objek yang sebenarnya adalah menggunakan lodash seperti:
Untuk mengembalikan nilai kunci pertama, (jika Anda tidak tahu persis nama kunci pertama):
jika Anda tahu nama kuncinya cukup gunakan:
atau
sumber
Jika Anda perlu mengakses "properti pertama dari suatu objek", itu mungkin berarti ada sesuatu yang salah dengan logika Anda. Urutan properti objek seharusnya tidak menjadi masalah.
sumber
Gunakan array daripada objek (kurung siku).
Perhatikan bahwa Anda kehilangan pengidentifikasi 'foo'. Tapi Anda bisa menambahkan properti nama ke objek yang terkandung:
sumber
Ada alasan untuk tidak melakukan ini?
sumber
.map()
hanya ada untuk iterables bawaanAnda dapat menggunakan
Object.prototype.keys
yang mengembalikan semua kunci suatu objek dalam urutan yang sama. Jadi jika Anda menginginkan objek pertama, dapatkan saja array itu dan gunakan elemen pertama sebagai kunci yang diinginkan.sumber
kita juga bisa melakukan pendekatan ini.
sumber
Inilah cara yang lebih bersih untuk mendapatkan kunci pertama:
sumber
[first]
. Pengguna tidak meminta array sebagai jawabannya. Mengapa melakukan inifirst = Object.keys(example)[0]
yang akan melakukan hal yang sama tanpa perlu membungkus jawabannya dalam sebuah array. Mengapa milikmu lebih bersih?