152 votes

Comment puis-je accéder à un objet JavaScript dont la clé contient des espaces ?

J'ai un objet JavaScript qui ressemble à quelque chose comme ceci :

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

Je peux accéder aux propriétés de cartoon facilement en utilisant myTextOptions.cartoon.comic ou autre. Cependant, je n'ai pas réussi à trouver la bonne syntaxe pour accéder à kid . J'ai essayé ce qui suit, sans succès :

myTextOptions.character names.kid
myTextOptions."character names".kid
myTextOptions.character\ names.kid
myTextOptions.'character names'.kid
myTextOptions.["character names"].kid
myTextOptions.character%20names.kid

0 votes

Dans Google Chrome, si vous accédez à l'élément d'inspection et que vous passez la souris sur les ensembles de données du fichier json, une info-bulle apparaîtra pour chaque ensemble de données individuel, indiquant son chemin d'accès et vous donnant également la possibilité de copier le chemin d'accès dans votre presse-papiers. Juste un FYI.

0 votes

Excellente réponse. Mais la dernière option n'a pas fonctionné pour moi.

0 votes

Plus... Lorsque je tape myTextOptions.character%20n.kid, le résultat est 'NaN'. Le dernier nom de propriété (kid) n'a pas d'importance, il peut être n'importe quel autre. J'utilise FireFox Quantum 8.3.0esr (64 bits) sur Debian 9.

288voto

jAndy Points 93076

Utilisez la "notation entre crochets" de l'ECMAscripts :

myTextOptions[ 'character names' ].kid;

Vous pouvez utiliser cette notation dans les deux sens, lecture et écriture.

Pour plus d'informations, lisez ici :

4 votes

Julio mentionne dans l'OP qu'il avait déjà essayé d'utiliser myTextOptions.["character names"].kid - pour compléter cette question, je me demandais pourquoi cela ne fonctionnait pas ?

10 votes

@James_F Parce qu'il a aussi utilisé le dot notation simultanément. Il ne doit y avoir qu'une seule directive d'accès.

2 votes

Oh, oui, désolé - je regardais tellement fort que je n'ai pas vu le point supplémentaire avant la parenthèse ! - merci

6voto

Ahmad Awais Points 9142

Les propriétés des objets JavaScript peuvent également être consultées ou définies à l'aide d'une notation entre crochets (pour plus de détails, voir accesseurs de propriété ). Les objets sont parfois appelés tableaux associatifs, car chaque propriété est associée à une valeur de chaîne de caractères qui peut être utilisée pour y accéder. Ainsi, par exemple, vous pouvez accéder aux propriétés de l'objet myCar de la manière suivante :

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

Pour en savoir plus, consultez le site Travailler avec des objets JS .

Donc dans votre cas, c'est myTextOptions['character names'].kid;

5voto

Shubham AK Points 21

Nous pouvons également le faire en -

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

Ceci est utile lorsque nous avons des clés consécutives qui consistent en un espace.

3voto

Vikas Gupta Points 128

Permettez-moi de partager ma solution ici J'utilise VueJs avec le type script.

J'ai obtenu le json suivant pour le parser et l'afficher dans l'interface utilisateur.

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

J'ai créé le modèle suivant interférer dans Typescript

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

J'ai appelé l'API comme :

   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[]>;
  } 

Utilisé dans JSX comme :

 <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>

La même chose peut aussi fonctionner dans React et Angular.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X