我还很擅长编程,而且我很难在/ 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语句,它将如何改变?解释是对的吗?或者还有更多吗?
先谢谢你。
答案 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)
for
和forEach
不是您唯一的选择。您也可以使用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);
技巧就是切片功能,它返回一个没有前两个元素的新数组。