【问题标题】:Trying to access array object in JS gives me undefined试图在 JS 中访问数组对象给了我 undefined
【发布时间】:2016-09-19 17:58:56
【问题描述】:

我有这个 JS 输出

我正在尝试使用这种方法访问 ModelState 数组的第一个成员:

console.log(data.ModelState[0]);

但我遇到了未定义的错误。

当我尝试做 alert(data.ModelState) 时,我得到了 Object 对象。

如何访问 ModelState 数组中的第一个值?

【问题讨论】:

  • 我相信这是一个有一个空白键(或者可能是空格?)的对象,它有一个数组作为值。所以你需要类似data.ModelState[""][0]
  • 您在哪个浏览器中测试这个? @Laziale
  • @RanojitBanerjee 那是 Firefox。更具体地说,Firebug 扩展。
  • @vlaz 请提供您的评论作为答案,以便我选择它作为正确答案。谢谢

标签: javascript jquery arrays


【解决方案1】:

我似乎您的数据包含一个具有空白键的数组。所以它很可能看起来像这样

{
    ModelState: {
        "": [ "string1", "string2" ]
    }
}

您需要通过那里的密钥访问它,只要您知道它是什么,例如data.ModelState[""][1] //"string1"

如果您不确定它们的关键是什么或想要一个不那么脆弱的代码,还有其他选择:

 var data = {
   ModelState: {
     "": [ "string1", "string2" ]
   }
 };

console.log("--Using Object.keys--")
Object.keys(data.ModelState).forEach(function(key) {
  console.log(data.ModelState[key]);
})

console.log("--Using for...in loop--")
for (var key in data.ModelState) {
  console.log(data.ModelState[key]);
}

【讨论】:

    【解决方案2】:

    您必须使用data.ModelState[''][0] 访问它。看起来你有一个嵌套数组,包含两个字符串的数组元素有一个空的或只有空格的字符串作为索引。

    【讨论】:

      【解决方案3】:

      [object Object] 是你的第一个线索——虽然我无法重现你的确切问题,但看起来你认为是数组的对象实际上是 JavaScript Object,这是一种不同的数据结构。 JS 对象与其他面向对象语言中的对象非常相似。正如您所注意到的,它们的字符串表示形式是[object Object]],无论它们的内容如何。

      > String({})
      < "[object Object]"
      > String({abc: "foo", def: "bar"})
      < "[object Object]"
      

      如果您用如何重现问题的步骤更新您的问题,我可以提供更多帮助,但我希望这足以让您走上正轨!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 2021-05-21
        相关资源
        最近更新 更多