Saya mempunyai struktur data bersarang yang mengandungi objek dan tatasusunan. Bagaimana untuk mengekstrak maklumat, iaitu mengakses nilai tertentu atau berbilang (atau kunci)?
Contohnya:
var data = { code: 42, items: [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }] };
Bagaimana untuk mengaksesitems
中第二项的name
?
Anda boleh mengaksesnya dengan cara ini
atau
Kedua-dua kaedah adalah sama.
Pengetahuan awal
JavaScript hanya mempunyai satu jenis data yang boleh mengandungi berbilang nilai: Objek. Array ialah satu bentuk objek yang istimewa.
(Normal) objek mempunyai bentuk berikut
Bentuk tatasusunan ialah
Tatasusunan dan objek kedua-duanya mendedahkan struktur
key -> value
. Kekunci dalam tatasusunan mestilah nombor, manakala sebarang rentetan boleh digunakan sebagai kunci dalam objek. Pasangan nilai kunci juga dipanggil "sifat".Sifat boleh diakses menggunakan notasi titik
atau notasi kurungan, jika nama sifat bukan JavaScript yang sah nama pengecam[spesifikasi], atau jika nama itu ialah nilai pembolehubah:
Oleh itu, elemen tatasusunan hanya boleh diakses menggunakan notasi kurungan:
Tunggu...bagaimana dengan JSON?
JSON ialah perwakilan teks data, sama seperti XML, YAML, CSV, dll. Untuk memproses data sedemikian, anda perlu menukarnya terlebih dahulu kepada jenis data JavaScript, iaitu tatasusunan dan objek (cara memproses data ini baru dijelaskan). Soalan Menghuraikan JSON dalam JavaScript? Cara menghuraikan JSON dijelaskan dalam .
Bahan bacaan lanjut
Cara mengakses tatasusunan dan objek adalah asas JavaScript, jadi disyorkan untuk membaca Panduan JavaScript MDN, terutamanya pelbagai bahagian
Akses struktur data bersarang
Struktur data bersarang ialah tatasusunan atau objek yang merujuk tatasusunan atau objek lain, iaitu nilainya ialah tatasusunan atau objek. Struktur sedemikian boleh diakses dengan aplikasi berturut-turut notasi titik atau kurungan.
Berikut adalah contoh:
Katakan kita mahu mengakses item kedua
名称
.Begini cara kami melakukannya langkah demi langkah:
Seperti yang kita lihat,
data
是一个对象,因此我们可以使用点表示法访问其属性。items
sifat diakses seperti berikut:Nilai ialah tatasusunan dan untuk mengakses elemen keduanya, kita perlu menggunakan notasi kurungan:
Nilai ini ialah objek, dan sekali lagi kami menggunakan notasi titik untuk mengakses sifat
name
. Jadi kita berakhir dengan:Sebagai alternatif, kita boleh menggunakan notasi kurungan untuk sebarang atribut, terutamanya jika nama itu mengandungi aksara yang menjadikannya tidak sah untuk notasi titik:
Saya cuba mengakses hartanah tetapi saya hanya mendapat
undefined
maklumat?Kebanyakan masa apabila anda menghadapi
未定义
, objek/susunan tidak mempunyai sifat dengan nama itu.Gunakan
console.log
或console.dir
dan semak struktur objek/susunan. Ada kemungkinan bahawa harta yang anda cuba akses sebenarnya ditakrifkan pada objek/tatasusunan bersarang.Bagaimana jika nama hartanah adalah dinamik dan saya tidak mengenalinya terlebih dahulu?
Jika nama sifat tidak diketahui atau kami ingin mengakses semua sifat objek/elemen tatasusunan, kami boleh menggunakan tatasusunan gelung
for...in
[MDN] 循环对象和for
[MDN] untuk melelaran ke atas semua sifat/elemen.objek
Untuk lelaran ke atas semua sifat
data
, kita boleh lelaran ke atas objek seperti berikut:Bergantung pada asal objek itu (dan perkara yang anda mahu lakukan), anda mungkin perlu menguji pada setiap lelaran sama ada harta itu sememangnya harta objek atau harta warisan. Anda boleh menggunakan
Object#hasOwnProperty代码> [MDN]
.Sebagai alternatif kepada
susunan nama atributfor...in
和hasOwnProperty
的替代方案,您可以使用Object.keys
untuk...dalam dan hasOwnProperty, anda boleh menggunakan Object.keys [MDN] Dapatkan:
susun
Untuk mengulangi semua elemendata.items
数组 的所有元素,我们使用for
data.items
for...in
array, kami menggunakan gelung for: