for循环与foreach循环的区别

9

我还是一个编程新手,对于for和foreach之间的区别感到困惑。更加技术性地说,foreach循环会计算需要执行的次数,而下面的代码不会。

假设我有一个像这样的for循环示例:

var i = result = 0;
for (var i = 2; i < process.argv.length; i++) {
    result = result + Number(process.argv[i]);
}

console.log(result);

如果这段代码变成foreach语句,将会有什么改变?解释是否正确?或者还有其他方面需要注意吗?
提前感谢您。

JavaScript 没有 foreach 语句。它有一个特定于 Array.forEach() 方法。或者,它也有 for..in 循环,用于迭代对象的键。 - Jonathan Lonowski
3个回答

4

foreach循环遍历数组中的所有元素,并逐一提供给您,而无需使用迭代变量'i'进行任何混乱操作。例如,您可以这样做:

var result = 0;
process.argv.forEach(function(element){
   result = result + element;
});

你的代码和这段代码有区别:你的代码因为'i'从2开始,跳过了前两个元素。在foreach循环中更难实现,如果需要跳过元素,你应该使用for循环。
foreach循环为你设置了计数器。虽然方便,但不够灵活。它总是从第一个元素开始,到最后一个元素结束。一个酷炫的事情是我们也不必做任何类似 '[i]' 的事情。数组中的元素被拉出来并传递给我们的函数。
总之,foreach循环只是一种简化了的用于查看数组中每个元素的循环。
我个人认为node.js中的foreach循环很丑陋,因为它不是一个语句,而只是一个附加到数组上的函数。我更喜欢在像php这样的语言中它们是语言的一部分的方式。
$result = 0;
foreach ($process as $element) {
    $result = $result + $element;
}

但这只是个人喜好而已。

当你说foreach循环遍历数组中的所有元素时,它是否与索引数组或关联数组有关呢?在foreach循环中,键对输出没有影响。 - Tryah85
非常感谢你,顺便说一句,Damien :) - Tryah85

3

forforEach 不是你唯一的选项。你还可以使用 reduce

var result = process.argv.slice(2).reduce(function(sum, n) {
  return sum + parseInt(n, 10);
}, 0);

console.log(result);

试一试就知道

$ node reduce.js 1 2 3
6

0
我不确定,但可能是因为您声明了“i”两次(一次在第一行,然后在for循环中再次声明)。
这样仅使用简单的for循环就可以解决问题:
var result = 0;

for (var i = 2; i < process.argv.length; i++) {
  result += Number(process.argv[i]);
}

console.log(result);

如果您想使用forEach:
var result = 0;
process.argv.slice(2).forEach(function(element) {
  result += Number(element);
});
console.log(result);

那里的诀窍在于切片函数,它返回一个新数组,其中不包括前两个元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接