如何将k var放入for循环结构中。我想要更紧凑的代码,不像这个:
var k = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i] == 'x') {
k++;
}
}
答案 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
循环体外声明k
和for
,位于函数或脚本块的顶部。通过这种方式,您不会欺骗自己,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++;
}