构造更复杂的for循环

时间:2010-07-21 21:25:28

标签: javascript

如何将k var放入for循环结构中。我想要更紧凑的代码,不像这个:

var k = 0;
for (var i = 0; i < arr.length; i++) {
   if (arr[i] == 'x') {
       k++;
   }
}

6 个答案:

答案 0 :(得分:3)

虽然由于构造新阵列这一事实而效率不高,但使用过滤器会导致更紧凑的代码。

arr.filter(function(e){ return e == 'x'; }).length;

另一种选择,虽然不太清楚,但避免构建新数组:

arr.reduce(function(x, e){ return x + (e == 'x' ? 1 : 0); }, 0);

答案 1 :(得分:2)

将其添加到for语句的第一个子句中,用逗号分隔:

   for (var i = 0, k = 0; i < mystick.length; i++) {
      if (mystick[i] == 'huge') {
          k++;
      }
   }

答案 2 :(得分:2)

不太可读,但似乎有效:

for (var i = 0, k = 0; i < mystick.length; i++) {
    mystick[i] == "huge" && k++;
}

这是一个单一的班轮(甚至更丑):

for (var i = k = 0; i < mystick.length; i++, mystick[i] == "huge" && k++);

答案 3 :(得分:2)

因为这是javascript并且javascript没有块范围,所以实际上最好的做法是相反 - 在i循环体外声明kfor ,位于函数或脚本块的顶部。通过这种方式,您不会欺骗自己,i仅限于for循环。你仍然可以在for循环的主体中初始化它们,正如其他人所说:

var k,
    i;
...

for (i = 0, k = 0; i < arr.length; i++) {
    if (arr[i] == 'x') {
        k++;
    }
}

答案 4 :(得分:1)

你还应该测量for循环第一部分中棍子的长度,否则你将在每次迭代时测量它。而且你也可以使k位更加紧凑:

for (var i = k = 0, j = mystick.length; i < j; i++) {
      if (mystick[i] == 'huge') {
          k++;
      }
   }

答案 5 :(得分:1)

只是为了让事情变得有趣,一个完全不同的(并且稍微快一点,因为循环往往会在javascript中执行得更好)。

var i = arr.length;
while(i--){
  if(arr[i] == 'x')k++;
}