在语法For循环中定义循环条件数组/对象

时间:2014-06-20 16:17:29

标签: javascript arrays object for-loop conditional-statements

当我循环一个数组或对象时,我经常使用这种方式:

var arrCars = ["opel" , "audi" , "volvo" , "volkswagen" , 
              "renault" , "porsche" , "infinity" , "lexus"];

for (var i = 0, a; a = arrCars[i]; i++) {
  alert(a);
}

fiddle

在我看来,它提供了明确的短代码,而不是例如这样:

for (var i = 0; i < arrCars.length; i++) {
  alert(arrCars[i]);
}

在这个例子中,它不是一个大问题,但是当有一些嵌套对象等时,它会提供很多代码。

您可以在此问题here下看到许多语法可能性。但我仍然无法找到如何循环通过数组的一部分。例如,如何使用我的首选语法仅循环前3个值。当然,我可以使用额外的条件语句,但我想知道如何在for语法本身中包含这个条件,如:“ for(var i = 0; i&lt; 4; i ++){} “如果可能的话。

4 个答案:

答案 0 :(得分:3)

由于我在评论中提到的原因,我不喜欢您的语法。但要回答这个问题:

for (var i = 0, a; i < 3 && (a = allCars[i]); i++)

FIDDLE

答案 1 :(得分:2)

在查看建议后,您想要的是:

for (var i = 0, a; (a = arrCars[i]) && i < 3; i++) {
    ...
}

看来你不能把作业放在第一个地方以外的任何地方(甚至括号都不能解决)和你需要用括号来防止分配到arrCars[i] && i < 3

我同意其他评论,你最好没有一个评估为false的数组项。

答案 2 :(得分:0)

你走在正确的轨道上。

var myArray = ["0", "1", "2", "3", "4"];

for (var i = 0; i < 4; i++) {
alert(i);
}

这将为您的数组元素0 - 2(数组中的前3个)

发出警告消息

答案 3 :(得分:0)

for (var i = 0, a; ((a = arrCars[i]) || true) && i < 3; i++) {
    doStuff(a);
}

在括号中包含赋值可确保赋值不会变为布尔值,然后使用true对该赋值结果进行“或”运算,以确保该赋值中的元素评估为false的数组不会中断for循环。但是在这一点上,我认为整个for循环线非常可怕。我一直都是这样做的:

for (var i = 0; i < 3; i++) {
    var a = arrCars[i];

    doStuff(a);
}

它并不简洁,但我总是更喜欢可读性而不是紧凑性。让minifier负责压缩事物。