计算数组中的总数
问题描述:
我正在尝试编写一个计算总长度为3的数组的代码。每个3个整数都来自提示符。计算数组中的总数
现在我的代码是这样的:
var num1 = prompt("First number");
var num2 = prompt("Second number");
var num3 = prompt("Third number");
var new_array = [num1, num2, num3]
function sum_three(new_array)
{
return new_array[0] + new_array[1] + new_array[2];
}
document.write(sum_three(new_array));
然而,当我看到的结果,似乎这
return new_array[0] + new_array[1] + new_array[2];
部分不计算,它只是串连的数字。 我如何开展工作?
答
由键盘输入的输入是字符串。如果您在字符串上使用'addition'+
,则将它们连接起来。您必须将字符串中包含的数字转换(解析)为实际的javascript数字。
这样做的一个简单方法是在每个字符串变量前添加一个+
。它会尝试最好的“解释”你的字符串作为数字
return +new_array[0] + +new_array[1] + +new_array[2];
其实,正确的技术术语是“强制”,感谢@NeilDocherty,这里更多信息https://github.com/getify/You-Dont-Know-JS/blob/master/types%20%26%20grammar/ch4.md)
简单的例子展示的行为:
console.log("3" + "5"); // outputs 35
console.log(+"3" + +"5"); // outputs 8
您还可以使用parseInt
,就像你已经做到的一样。
有两个之间的差异,例如参见这篇文章:parseInt vs unary plus - when to use which
尤其parseInt函数将返回NaN
空字符串,而+
将强制其为0
。
答
更现代的解决方案是使用Array.prototype.reduce方法。
我觉得这更容易阅读,但如果你要支持比IE9旧的浏览器,那么你就需要polyfill它。
var new_array = [prompt("First number"), prompt("Second number"), prompt("Third number")];
function array_sum(accumulator, currentValue) {
return parseFloat(accumulator.toString()) + parseFloat(currentValue.toString());
}
function sum_three(arr) {
return arr.reduce(array_sum);
}
document.write(sum_three(new_array));
解析您的数字为整数。 – Nick
好吧,我刚刚添加了像 var num1_int = parseInt(num1); var num2_int = parseInt(num2); var num3_int = parseInt(num3); 它工作。但是,你知道有没有其他方法可以减少代码?我认为他们太久了。 – kayak
使用reduce进行求和,并使用Number()从字符串中获取数字。 'let res = arr.reduce((a,b)=> a + Number(b),0);'。您的整个代码:'let res = new Array(3).fill()。reduce((a,b)=> a + Number(prompt(“Enter number”)),0); ' – baao