【问题标题】:How to loop through Nested Json Array with (JavaScript) for loop and display the text如何使用 (JavaScript) for 循环遍历嵌套的 Json 数组并显示文本
【发布时间】:2012-07-12 18:33:46
【问题描述】:

这可能是一个相当简单的问题,但无论我更改 for 循环多少次,它都对我不起作用。那么如何在 JavaScript 中使用 for 循环遍历这个数组呢?

var fielditems =[
     [["News Tips"],["Opinions"],["MedMinutes"]],
     [["Yes"],["No"],["Maybe"]],
     [["How"],["Why"],["When"]]
];

这就是我所拥有的,但它不起作用。我使用警报来测试结果,但它甚至没有返回任何内容。

for(itemSet in fielditems){
    var itemSetValues = fielditems[itemSet];
    for(set in itemSetValues){
        var itemValue = itemSetValues[set];
        for(value in itemvalue){
            alert(itemValue[value]);
        }
    }
}

我做错了什么?

【问题讨论】:

    标签: javascript json loops nested-loops


    【解决方案1】:

    不要将for()in 一起用于数组。它用于对象属性。请改用标准格式。

    演示: http://jsfiddle.net/ThinkingStiff/EVWch/

    脚本:

    var fielditems =[
            [["News Tips"],["Opinions"],["MedMinutes"]],
            [["Yes"],["No"],["Maybe"]],
            [["How"],["Why"],["When"]]
        ];
    
    for( var itemIndex = 0; itemIndex < fielditems.length; itemIndex++ ){
        var itemSetValues = fielditems[itemIndex];
        for(var setIndex = 0; setIndex < itemSetValues.length; setIndex++ ){
            var itemValue = itemSetValues[setIndex];
            for(var valueIndex = 0; valueIndex < itemValue.length; valueIndex++ ){
                alert(itemValue[valueIndex]);
            };
        };
    };
    

    【讨论】:

      【解决方案2】:

      首先,控制台是你的朋友。您会收到错误 ReferenceError: itemvalue is not defined,因为 javascript 区分大小写。将最嵌套循环中的itemvalue 更改为itemValue

      其次,如果你想遍历一个数组,你应该使用 for-loop 而不是 for-in-loop

      【讨论】:

        【解决方案3】:
        • 不要在数组上使用for-in 循环
        • 不要使用(运行)变量而不将它们声明为本地变量
        for (var i=0; i<fielditems.length; i++) {
            var itemSetValues = fielditems[i];
            for (var j=0; j<itemSetValues.length; j++) {
                var itemvalue = itemSetValues[j]; // notice the case
                for (var k=0; k<itemvalue.length; k++) {
                    alert(itemvalue[k]);
                }
            }
        }
        

        【讨论】:

          【解决方案4】:

          for..in 用于对象 ({}),而不用于数组 ([])。

          您需要使用标准的for 循环。

          for(var i = 0, iLen = fielditems.length; i < iLen; i++){
              var iItem = fielditems[i];
              for(var j = 0, jLen = iItem.length; j < jLen; j++){
                  var jItem = iItem[j];
                  alert(jItem[0]); // you can also add another loop here, if this will have more elements
              }
          }
          

          注意:

          for(var i = 0, iLen = fielditems.length; i < iLen; i++)
          

          优于:

          for(var i = 0; i < fielditems.length; i++)
          

          因为fielditems.length 不是在每个循环中都被请求,只是在开始时请求一次。

          【讨论】:

          • 我从不知道您可以按照自己的方式做到这一点。谢谢!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-18
          • 2021-04-05
          • 1970-01-01
          • 2021-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多