计算数组中的总数

问题描述 投票:-2回答: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];

部分不计算,它只是连接数字。我该如何工作?

javascript arrays sum
2个回答
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
投票

更现代的解决方案是使用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));
© www.soinside.com 2019 - 2024. All rights reserved.