为什么它只对最后两个数字求和?

时间:2015-05-28 09:42:53

标签: javascript node.js

我正在尝试制作一个程序,将每个作为参数给出的数字相加。为此,我编写了以下代码:

var x = 0;
var i = 2;

while (isNaN(+process.argv[i + 1]) == false){
    x = +process.argv[i] + +process.argv[i + 1];
    i++;
}

console.log(x);

问题是我写的代码只加总了最后一个参数。

我使用node sumArgs.js 1 2 3启动我的代码 它返回5

我的代码有什么问题,为什么它没有按计划运行?

1 个答案:

答案 0 :(得分:1)

每次循环时会发生什么,它是取当前参数,然后是下一个,并将x设置为等于它们的总和。

x需要添加,而不是设置。您可以这样做:

x += process.argv[i]

x = x + process.argv[i]

我也不确定你为什么要在每个循环中添加2个参数,因为这会导致最后的总和不正确(除非你每次循环增加两次)。

我应该注意到,减少它的地图,如在另一个注释中一样,不会起作用,因为前两个参数不是传递给程序的参数,它们将是" node"和" program.js"。

var x = 0;
var i = 2;

while (isNaN(+process.argv[i]) == false){
    x = x + process.argv[i];
    i++;
}

console.log(x);

但是,你可以做的是使用切片:

var sum = process.argv.slice(2).reduce(function(previousValue, currentValue) {
  return previousValue + currentValue;
});