【问题标题】:How to iterate object in JavaScript? [duplicate]如何在 JavaScript 中迭代对象? [复制]
【发布时间】:2013-03-07 22:49:59
【问题描述】:

我有这个对象。我想在 JavaScript 中迭代这个对象。这怎么可能?

var dictionary = {
    "data": [
        {"id":"0","name":"ABC"},
        {"id":"1","name":"DEF"}
    ],
    "images": [
        {"id":"0","name":"PQR"},
        {"id":"1","name":"xyz"}
    ]
};

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您可以使用以下代码来完成。您首先使用 dictionary.data 获取数据数组并将其分配给数据变量。之后,您可以使用普通的 for 循环对其进行迭代。每行将是数组中的一个行对象。

    var data = dictionary.data;
    
    for (var i in data)
    {
         var id = data[i].id;
         var name = data[i].name;
    }
    

    您可以按照类似的方法来迭代图像数组。

    【讨论】:

    • 你应该把你的花括号放在 JS 的同一行(我通常提倡花括号在同一行,但 JavaScript 很奇怪:robertnyman.com/2008/10/16/…
    • 我有相同的数组结构,但为什么它返回未定义
    • for...in 不适用于数组。
    • @TanyavonDegurechaff 尝试删除 dictionary.data 并迭代 dictionary
    • for...in 用于迭代对象属性。对于数组,请改用for...of
    【解决方案2】:

    也有这种方式(EcmaScript5 的新手):

    dictionary.data.forEach(function(item){
        console.log(item.name + ' ' + item.id);
    });
    

    图像的相同方法

    【讨论】:

      【解决方案3】:

      类似的东西:

      var dictionary = {"data":[{"id":"0","name":"ABC"},{"id":"1", "name":"DEF"}], "images": [{"id":"0","name":"PQR"},{"id":"1","name":"xyz"}]};
      
      for (item in dictionary) {
        for (subItem in dictionary[item]) {
           console.log(dictionary[item][subItem].id);
           console.log(dictionary[item][subItem].name);
        }
      }
      

      【讨论】:

      • for...in 不适用于数组。 - 所以对于..in 字典,但是对于 (var j=0;j
      【解决方案4】:

      使用点符号和/或括号符号来访问对象属性和for loops 来迭代数组:

      var d, i;
      
      for (i = 0; i < dictionary.data.length; i++) {
        d = dictionary.data[i];
        alert(d.id + ' ' + d.name);
      }
      

      您还可以使用for..in 循环来迭代数组;但是,添加到Array.prototype 的属性可能会显示出来,您可能不一定会以正确的顺序甚至以任何一致的顺序获取数组元素。

      【讨论】:

        【解决方案5】:

        使用生成器函数,您可以迭代深层键值。

        function * deepEntries(obj) { 
            for(let [key, value] of Object.entries(obj)) {
                if (typeof value !== 'object') 
                    yield [key, value]
                else 
                    for(let entries of deepEntries(value))
                        yield [key, ...entries]
            }
        }
        
        const dictionary = {
            "data": [
                {"id":"0","name":"ABC"},
                {"id":"1","name":"DEF"}
            ],
            "images": [
                {"id":"0","name":"PQR"},
                {"id":"1","name":"xyz"}
            ]
        }
        
        for(let entries of deepEntries(dictionary)) {
            const key = entries.slice(0, -1).join('.')
            const value = entries[entries.length-1]
            console.log(key, value)
        }

        【讨论】:

        • 像魅力一样工作。谢谢。
        【解决方案6】:
        for(index in dictionary) {
         for(var index in dictionary[]){
            // do something
          }
        }
        

        【讨论】:

          【解决方案7】:

          使用 for 和 foreach 循环

          var dictionary = {
               data: [{ id: "0", name: "ABC" }, { id: "1", name: "DEF" }],
               images: [{ id: "0", name: "PQR" }, { id: "1", name: "xyz" }]
          };
          dictionary.data.forEach(item => {
               console.log(item.id + " " + item.name);
          });
          
          for (var i = 0; i < dictionary.data.length; i++) {
               console.log(dictionary.data[i].id + " " + dictionary.data[i].name);
          }
          

          【讨论】:

            【解决方案8】:
            var dictionary = {
                    "data":[{"id":"0","name":"ABC"}, {"id":"1","name":"DEF"}],
                    "images": [ {"id":"0","name":"PQR"},"id":"1","name":"xyz"}]
            };
            
            
            for (var key in dictionary) {
                var getKey = dictionary[key];
                getKey.forEach(function(item) {
                    console.log(item.name + ' ' + item.id);
                });
            }
            

            【讨论】:

              【解决方案9】:

              以下是您拥有的所有选项:

              1。 for...of (ES2015)

              var dictionary = {
                  "data": [
                      {"id":"0","name":"ABC"},
                      {"id":"1","name":"DEF"}
                  ],
                  "images": [
                      {"id":"0","name":"PQR"},
                      {"id":"1","name":"xyz"}
                  ]
              };
              
              for (const entry of dictionary.data) {
                console.log(JSON.stringify(entry))
              }

              2。 Array.prototype.forEach (ES5)

              var dictionary = {
                  "data": [
                      {"id":"0","name":"ABC"},
                      {"id":"1","name":"DEF"}
                  ],
                  "images": [
                      {"id":"0","name":"PQR"},
                      {"id":"1","name":"xyz"}
                  ]
              };
              
              dictionary.data.forEach(function(entry) {
                console.log(JSON.stringify(entry))
              })

              3。 for() (ES1)

              var dictionary = {
                  "data": [
                      {"id":"0","name":"ABC"},
                      {"id":"1","name":"DEF"}
                  ],
                  "images": [
                      {"id":"0","name":"PQR"},
                      {"id":"1","name":"xyz"}
                  ]
              };
              
              for (let i = 0; i < dictionary.data.length; i++) {
                console.log(JSON.stringify(dictionary.data[i]))
              }

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-04-16
                • 2011-03-31
                • 2017-03-17
                • 2015-11-07
                • 1970-01-01
                • 2012-01-13
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多