求和输入整数

时间:2014-05-30 16:00:59

标签: javascript arrays node.js

我想运行一个文件,在命令行中添加值。 因此, node myscript 1 5 10 返回16。

然而,似乎在我的代码中, sum 变成了一个数组变量 - 不知何故。 我想知道为什么会发生这种情况,以及正确的表述应该是什么。

var array = process.argv;
var count = array.length - 1;
var i = 2;
var sum = 0;

console.log("There are " + (count - 1) + " individual numbers.");

while (i <= count) {
    sum += array[i];    
    i++;
}

console.log(sum);

2 个答案:

答案 0 :(得分:4)

输入变量以字符串而非数字形式给出,因此为了总结它们,您需要将它们转换为数字:

sum += +array[i];

// or

sum += parseInt( array[i], 10 );

在您当前的代码中,您连接了字符串(并且sum的初始值也会转换为字符串。)

答案 1 :(得分:0)

问题是array是一个字符串数组,而不是数字。这意味着0将变为字符串"0",然后与其他字符串变量连接。

您可以将array转换为Number这样的数组:

array = argv.slice(1).map(Number)

请注意,我已使用slice删除了第一个条目,即程序名称。

现在,您可以从元素array开始遍历0,您的代码将按预期运行。

工作示例(利用深奥的--> operator;)

var array = argv.slice(1).map(Number);
var count = array.length;
var sum = 0;

console.log("There are " + count + " individual numbers.");

while (count --> 0) sum += array[count];
console.log(sum);

更新

您也可以使用map

,而不是使用reduce
var array = argv.slice(1);
console.log("There are " + array.length + " individual numbers.");
var sum = array.reduce(function(prev, curr) { return prev + +curr }, 0);
console.log(sum);

reduce使用提供的功能组合array的所有值。一元+运算符用于将array中的值转换为数字。第二个参数是总和的初始值。