如何使用(JavaScript)for循环遍历嵌套的Json数组并显示文本

时间:2012-07-12 18:33:46

标签: javascript json loops nested-loops

这可能是一个相当简单的问题,但无论我多少次更改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]);
        }
    }
}

我做错了什么?

4 个答案:

答案 0 :(得分:0)

不要将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]);
        };
    };
};

答案 1 :(得分:0)

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

其次,如果你想迭代一个数组,你应该使用for-loop代替for-in-loop

答案 2 :(得分:0)

  • 不要在数组上使用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]);
        }
    }
}

答案 3 :(得分:0)

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,所以在开始时只需要一次。