如何访问在其键中包含空格的JavaScript对象?


112

我有一个JavaScript对象,看起来像这样:

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

我可以访问cartoon轻松使用myTextOptions.cartoon.comic或其他属性。但是,我无法正确访问的语法kid。我已经尝试了以下方法,但是没有运气:

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

在Google Chrome浏览器中,如果您要检查元素,然后将鼠标悬停在json文件数据集上,则每个单独的数据集都会显示一个工具提示,显示其路径,它还为您提供了将路径复制到剪贴板的选项。仅供参考。
西蒙·苏

好答案。但是最后一个选择对我没有用。
丹尼尔·班德拉

更多...当我键入myTextOptions.character%20n.kid时返回'NaN'。最后一个属性名称(孩子)无关紧要,应该是任何其他名称。我在Debian 9上使用FireFox Quantum 8.3.0esr(64位)
Daniel Bandeira

Answers:


231

使用ECMAscripts的“括号表示法”:

myTextOptions[ 'character names' ].kid;

您可以以任何一种方式使用该表示法,即进行阅读和书写。

有关更多信息,请在此处阅读:


2
julio在OP中提到他已经尝试使用过myTextOptions.["character names"].kid-为了完整地回答这个问题,我想知道为什么这没有用?
James_F

7
@James_F因为他也同时使用了dot notation。只能有一个访问器指令。
jAndy

2
哦,是的,很抱歉-看上去很难看,我没看到括号前的多余点!-谢谢
James_F '17

有人知道对象密钥中使用空格是好事还是坏事?
Juan P. Ortiz

1
@ JuanP.Ortiz,如果您使用打字稿,这不是一个好习惯,那么您将丢失打字稿编译检查。
Rosdi Kasim

4

JavaScript对象的属性也可以使用方括号表示法访问或设置(有关更多详细信息,请参见属性访问器)。对象有时被称为关联数组,因为每个属性都与可用于访问它的字符串值相关联。因此,例如,您可以按以下方式访问myCar对象的属性:

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

有关更多信息,请阅读使用JS对象

所以在你的情况下 myTextOptions['character names'].kid;


2

我们还可以通过-

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

当我们有包含空格的连续键时,这很有用。


0

让我在这里分享我的解决方案,我将VueJs与类型脚本一起使用。

我跟随json解析并显示在UI中

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

我创建了以下模型干扰打字稿

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

我将API称为:

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

在JSX中使用,例如:

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

同样也可以在React和Angular中工作。


0

使用此代码

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


简而言之,但是新的js用户可能不理解问题背后的原理。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.