【问题标题】:How can I traverse this Javascript object? [duplicate]如何遍历这个 Javascript 对象? [复制]
【发布时间】:2012-08-31 18:12:47
【问题描述】:

可能重复:
How do I enumerate the properties of a javascript object?

{ 
       347655082: {
                    album:{
                            title: "A",
                            genre: "Pop",
                          }
        },

        347655083: {

                    album:{
                            title: "B",
                            genre: "Rock", 
                          }
        }
}

通常“外部”键是相同的,因此我可以轻松定位嵌套对象。 在这种情况下,“外部”键是可变的,可以是任何东西。

albums = JSON.parse(json); //parse json storing it in albums

我无法在相册上运行 foreach,说“相册没有方法 foreach”。

albums.forEach(function(album, i){


}

【问题讨论】:

  • 严格来说,你所拥有的是一个 Javascript object literal,它看起来有点像 JSON,但语法更宽松。这就是你在真正的 JSON 上调用JSON.parse() 之后得到的。

标签: javascript json node.js


【解决方案1】:

您只能在数组上使用.forEach()。您的albums 实体是Object,因此您应该使用for ... in ...)

for (var key in albums) {
    if (albums.hasOwnProperty(key)) {
        // do something with albums[key]
        ...
    }
}

对于以 node.js 或任何其他 ES5 实现为目标的代码,您可能会省略 if 子句 - 只有当您的代码向 Object.prototype 添加了不安全的内容时才需要它。

【讨论】:

    【解决方案2】:

    ES5 有一个很好的迭代对象自身可枚举属性的方法 - Object.keys(obj)。 我更喜欢下面的迭代方法:

    Object.keys(albums).forEach(function (key) {
       console.log(albums[key]);
    });
    

    【讨论】:

      【解决方案3】:

      这不是有效的 json 有效的 json 是:-

          {
          "347655082": {
              "album": {
                  "genre": "Pop", 
                  "title": "A"
              }
          }, 
          "347655083": {
              "album": {
                  "genre": "Rock", 
                  "title": "B"
              }
          }
      }
      

      json中的keys需要双引号,如图所示。

      验证 json 结帐 jsonlint.com

      【讨论】:

      • 是的,我忘记了开始/结束括号(已更正),但这并不能回答我的问题。
      • @saeed:不,不仅仅是右括号。键必须用引号括起来才能成为有效的 JSON。如果您发布的内容实际上是您的 albums 对象,并且您在解析原始 JSON 时没有问题,那么就这么说吧。那么根本就没有理由提到JSON,只是让人困惑。
      • @FelixKling 这是一个常见错误 - OP 只是将对象文字与 JSON 混淆,然后选择了错误的问题标题......
      • @Alnitak:我知道,你可能是对的,但如果我们不明确指出这一点,它永远不会变得更好;)
      • 我的立场是正确的。我不应该使用术语 json。它是一个 javascript 对象字面量。
      猜你喜欢
      • 2012-11-12
      • 2021-05-08
      • 2013-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2011-02-26
      • 2017-07-10
      • 2014-07-19
      相关资源
      最近更新 更多