【问题标题】:for loop versus foreachfor 循环与 foreach
【发布时间】:2014-01-04 03:42:31
【问题描述】:

我在编程方面还是个新手,我很难希望 for/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 语句,这段代码会如何变化?解释对吗?或者还有更多?

在此先感谢您。

【问题讨论】:

标签: node.js for-loop foreach


【解决方案1】:

foreach 循环遍历数组中的所有元素并将它们一一提供给您,而无需对带有“i”的迭代变量进行任何处理。例如,您可以这样做:

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

您的代码与此代码之间存在差异:您的代码跳过了前两个元素,因为 'i' 从 2 开始。这在 foreach 循环中更难做到,如果需要,您应该坚持使用for 循环。

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

总之,对于需要查看数组中每个元素的情况,foreach 循环只是一个简化的 for 循环。

我个人认为 node.js 中的 foreach 循环很丑,因为它不是一个真正的语句,只是一个附加到数组的函数。我更喜欢它们在 php 之类的东西中的样子,它们是语言的一部分:

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

但这只是个人喜好。

【讨论】:

  • 当你说 foreach 循环遍历数组中的所有元素时;它是索引数组还是关联数组有关系吗?键对 foreach 循环的输出没有影响
  • 非常感谢 Damien BTW :)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    对此我不确定,但可能是因为您声明了两次“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);
    

    其中的技巧是 slice 函数,它返回一个没有前两个元素的新数组。

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2018-01-14
      • 2014-04-19
      • 2018-11-14
      • 2017-07-14
      相关资源
      最近更新 更多