for loop与foreach

时间:2014-01-04 03:42:31

标签: node.js for-loop foreach

我还很擅长编程,而且我很难在/ foreach之间寻找不同的东西。在一个更技术性的感叹号中,for each循环计算它需要多少次 - 与下面的代码不同。

假设我是这样的for循环样本:

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

console.log(result);

如果这个代码是foreach语句,它将如何改变?解释是对的吗?或者还有更多吗?

先谢谢你。

3 个答案:

答案 0 :(得分:3)

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

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

你的代码和这段代码之间有区别:你的代码跳过了前两个元素,因为'i'从2开始。这在foreach循环中更难做,如果你需要,你应该坚持for loop。

foreach循环为您设置计数器。方便,但不太灵活。它始终从第一个元素开始,到最后一个元素结束。值得注意的一件很酷的事情是,我们也不必做任何像“[i]”这样的事情。数组中的元素被拉出并传递给我们的函数。

总之,当你需要查看数组中的每个元素时,foreach循环只是一个简化的for循环。

我个人认为node.js中的foreach循环是丑陋的,因为它实际上不是一个语句,只是附加到数组的函数。我更喜欢他们看起来像php那样他们是语言的一部分:

$result = 0;
foreach ($process as $element) {
    $result = $result + $element;
}

但这只是个人品味。

答案 1 :(得分: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

答案 2 :(得分:0)

我不确定这一点,但可能是因为你宣布“我”两次(一行在第一行然后再在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);

技巧就是切片功能,它返回一个没有前两个元素的新数组。