我想运行一个文件,在命令行中添加值。 因此, 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);
答案 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
中的值转换为数字。第二个参数是总和的初始值。