0

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

4 回答 4

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

​</p>

于 2012-07-12T18:37:50.893 回答
0

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

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

于 2012-07-12T18:39:51.157 回答
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]);
        }
    }
}
于 2012-07-12T18:39:55.213 回答
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不是每个循环都请求,只是在开始时请求一次。

于 2012-07-12T18:40:51.243 回答