2017-12-18 248 views
-2

我正在尝试编写一个计算总长度为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]; 

部分不计算,它只是串连的数字。 我如何开展工作?

+3

解析您的数字为整数。 – Nick

+1

好吧,我刚刚添加了像 var num1_int = parseInt(num1); var num2_int = parseInt(num2); var num3_int = parseInt(num3); 它工作。但是,你知道有没有其他方法可以减少代码?我认为他们太久了。 – kayak

+0

使用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

回答

1

由键盘输入的输入是字符串。如果您在字符串上使用'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

+0

这就是所谓的强制,你可以在这里阅读它https://github.com/getify/You-Dont-Know-JS/blob/master/types%20%26%20grammar/ch4.md –

+0

谢谢!我只是parseInted的字符串,它的工作。 – kayak

+0

感谢您的链接! – kayak

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));