【问题标题】:Defining a multidimensional Object in Javascript [duplicate]在Javascript中定义多维对象[重复]
【发布时间】:2016-01-05 00:26:55
【问题描述】:

我有一些关于汽车的数据,并正在尝试创建一个函数,我可以在其中获取特定汽车的信息。我似乎无法正确格式化我的数据列表。我通过 JSLint 运行它,它告诉我这是错误的,但我不知道如何修复它。

var models = {
  "2009": 
    {Jaguar: [model: "XF", id: "123"], [model: "XK", id: "456"], [model: "XJ", id: "789"]}, 
    {Volvo: [model: "XC70", id: "223"], [model: "V50", id: "256"]}, 
  "2010": 
    {Jaguar: [model: "XF", id: "323"], [model: "XK", id: "356"]}, 
    {Volvo: [model: "XC70", id: "423"], [model: "V50", id: "456"]}
  };
   //**** Show an example model here
    console.log(models.2010.Jaguar[0].model);

【问题讨论】:

  • JSLint 是否明确表示“它是错误的”?
  • [ ] 用于仅包含值列表的数组。 { } 用于包含命名属性及其值的对象。
  • JavaScript 中没有关联数组。您还需要创建数组对象。
  • 是的@fauxserious,没有。但我认为这是一个公平的疑问,我认为没有理由投反对票。
  • 对不起@fauxserious,我无意指责你。 =) 我这么说是因为我看不出有人反对这个问题的理由。如果有原因,任何不赞成投票的人至少应该对此发表评论。

标签: javascript arrays object multidimensional-array


【解决方案1】:

你可以改成这样:

var models = {
    "2009":
            {
                Jaguar: [{model: "XF", id: "123"}, {model: "XK", id: "456"}, {model: "XJ", id: "789"}],
                Volvo: [{model: "XC70", id: "223"}, {model: "V50", id: "256"}]
            },
    "2010":
            {
                Jaguar: [{model: "XF", id: "323"}, {model: "XK", id: "356"}],
                Volvo: [{model: "XC70", id: "423"}, {model: "V50", id: "456"}]
            }
};
//**** Show an example model here
console.log(models['2010'].Jaguar[0].model);

【讨论】:

  • "2009": {Jaguar: ...}, {Volvo: ...}models.2010 是语法错误。 (当你纠正它时,我会投票。)
  • 是的。一瞬间。用这个编辑器很难编写代码。需要更多{,}
  • 确保代码正确的好方法:将其放入 REPL。幸运的是,JS 是在浏览器中运行的,一个 JS 控制台只有三个键。或者,您可以使用 jsbin、jsfiddle、stackoverflow sn-ps 或节点交互式 shell,然后从那里复制粘贴正确的解决方案。有时会出现无法测试解决方案的问题;这不是其中之一:D
【解决方案2】:
  • models 是正确的对象(由 "2009""2010" 索引)。
  • models["2009"] 应该是单个对象;你不能有两个值。 {Jaguar:...}, {Volvo:...} 错了,应该是{Jaguar: ..., Volvo:}
  • 再往下钻,Jaguar: ..., ..., ... 是错误的 - 每个索引只有一个值。在这种情况下,您希望该值是一个数组:Jaguar: [..., ..., ...]
  • 数组字面量不能有命名属性,所以[model: "XF", id: "123"] 不正确;这应该是一个对象,{model: "XF", id: "123"}
  • 您只能将点表示法与标识符一起使用; 2010 不是一个有效的标识符,所以 models.2010 是一个错误。对于名称不是标识符的属性,您必须使用括号表示法:models["2010"]

【讨论】:

  • 这是更好的答案,在我看来,我赞成。
【解决方案3】:
var models = {
  "2009": {
    Jaguar: [{model: "XF", id: "123"}, {model: "XK", id: "456"}, {model: "XJ", id: "789"}], 
    Volvo: [{model: "XC70", id: "223"}, {model: "V50", id: "256"}]
  }, 
  "2010": {
    Jaguar: [{model: "XF", id: "323"}, {model: "XK", id: "356"}], 
    Volvo: [{model: "XC70", id: "423"}, {model: "V50", id: "456"}]
  }
};

console.log(models[2010].Jaguar[0].model);

注意:models[2010] 因为它不能用点符号访问。

【讨论】:

  • 他正在研究他的答案,我正在研究我的,纯粹的收敛,而你,当然,正在研究你的下一次投票:D(p.d:1。我不复制答案其他用户,2.答案已编辑,它有效!)。
  • 这 2 个回答者之间 10 分钟。 ;) 但我知道会发生这种事情,我们只是想帮忙。
猜你喜欢
  • 2020-05-23
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 2013-10-24
  • 2021-10-01
  • 1970-01-01
相关资源
最近更新 更多