Bagaimana saya bisa mengakses objek JavaScript yang memiliki spasi di kunci objek?

112

Saya memiliki objek JavaScript yang terlihat seperti ini:

var myTextOptions = {
  'cartoon': {
     comic: 'Calvin & Hobbes',
     published: '1993'
  },
  'character names': {
    kid: 'Calvin',
    tiger: 'Hobbes'
  }
}

Saya dapat mengakses properti cartoondengan mudah menggunakan myTextOptions.cartoon.comicatau apa pun. Namun, saya belum bisa mendapatkan sintaks yang tepat untuk mengakses kid. Saya sudah mencoba yang berikut ini tetapi tidak berhasil:

myTextOptions.character names.kid
myTextOptions."character names".kid
myTextOptions.character\ names.kid
myTextOptions.'character names'.kid
myTextOptions.["character names"].kid
myTextOptions.character%20names.kid
julio
sumber
Di Google Chrome, jika Anda pergi untuk memeriksa elemen dan kemudian mengarahkan kursor ke kumpulan data file json, setiap kumpulan data individu akan memiliki tooltip yang muncul menunjukkan jalurnya dan itu juga memberi Anda opsi untuk menyalin jalur ke clipboard Anda. Hanya FYI.
Simon Suh
Jawaban yang bagus. Tetapi opsi terakhir tidak berhasil bagi saya.
Daniel Bandeira
selengkapnya ... Saat saya mengetik myTextOptions.character% 20n.kid mengembalikan 'NaN'. Nama properti terakhir (anak) tidak masalah, harus yang lain. Saya menggunakan FireFox Quantum 8.3.0esr (64-bits) pada Debian 9
Daniel Bandeira

Jawaban:

231

Gunakan ECMAscripts "braket notasi":

myTextOptions[ 'character names' ].kid;

Anda dapat menggunakan notasi itu dengan cara apa pun, membaca & menulis.

Untuk informasi lebih lanjut baca di sini:

jAndy
sumber
2
julio menyebutkan di OP bahwa dia sudah mencoba menggunakan myTextOptions.["character names"].kid- untuk melengkapi pertanyaan ini, saya bertanya-tanya mengapa itu tidak berhasil?
James_F
7
@James_F Karena dia juga menggunakan dot notationsecara bersamaan. Hanya boleh ada satu arahan aksesor.
jAndy
2
oh, ya, maaf - terlihat sangat sulit sehingga saya tidak melihat titik ekstra sebelum braket! - terima kasih
James_F
Apakah ada yang tahu apakah itu praktik yang baik atau buruk menggunakan spasi di kunci objek?
Juan P. Ortiz
1
@ JuanP.Ortiz, Ini bukan praktik yang baik jika Anda menggunakan skrip ketikan, Anda akan kehilangan pemeriksaan kompilasi skrip.
Rosdi Kasim
4

Properti objek JavaScript juga dapat diakses atau disetel menggunakan notasi braket (untuk lebih jelasnya lihat pengakses properti ). Objek terkadang disebut array asosiatif karena setiap properti dikaitkan dengan nilai string yang dapat digunakan untuk mengaksesnya. Jadi, misalnya, Anda dapat mengakses properti objek myCar sebagai berikut:

myCar['make'] = 'Ford';
myCar['model'] = 'Mustang';
myCar['year'] = 1969;

Untuk lebih lanjut, baca di Bekerja dengan Objek JS .

Jadi dalam kasus Anda itu myTextOptions['character names'].kid;

Ahmad Awais
sumber
2

Kami juga dapat melakukan ini dengan -

myTextOptions[ 'character names' ]['kid'];

Ini berguna ketika kita memiliki kunci berurutan yang terdiri dari spasi.

Shubham AK
sumber
0

Izinkan saya membagikan solusi saya di sini, saya menggunakan VueJs dengan skrip tipe.

Saya mengikuti json untuk diurai dan ditampilkan di UI

 {
    "Brand": "MAMA",
    "Variety": "Instant Noodles Coconut Milk Flavour",
    "Style": "Pack",
    "Country": "Myanmar",
    "Stars": 5,
    "Top Ten": "2016 #10"
  },

Saya telah membuat model berikut mengganggu di Ketik

export interface Resto {
    Brand: string;
    Variety: string;
    Style: string;
    Country: string;
    Stars: any;
    Top_Ten: string;
    }

Saya menyebut API sebagai:

   public async getListOfRestos() {
    return (await fetch(
      `http://starlord.hackerearth.com/TopRamen`,
      {
        method: "get",
        credentials: "include",
        headers: {
          "Content-Type": "application/json",
        },
        body: undefined
      }
    )) as IFetchResponse<Resto[]>;
  } 

Digunakan di BEJ seperti:

 <div class="parent" v-for="(x,i) in listOfRestos" :key="i">
      <div>{{x.Brand}}</div>
      <div>{{x.Variety}}</div>
      <div>{{x.Style}}</div>
      <div>{{x.Country}}</div>
      <div>{{x.Stars}}</div>
      <div>{{x['Top Ten']}}</div>
  </div>

Sama juga bisa bekerja di React dan Angular.

Vikas Gupta
sumber
0

gunakan kode ini

myTextOptions.["character names"]["kid"];

therealsungumo
sumber
Langsung ke inti dan sukses, tetapi pengguna js baru mungkin tidak memahami alasan di balik pertanyaan tersebut.
Belalang