计算阵列中的总数



我正在尝试编写一个代码,该代码计算数组长度为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号码。

这样做的一种简单方法是在每个字符串变量的前面添加+。它将尽力将您的字符串"解释"为数字

return +new_array[0] + +new_array[1] + +new_array[2];

实际上,正确的技术术语是"胁迫",谢谢@neildocherty,更多信息https://github.com/getify/you-dont-know-js/blob/blob/master/master/types & grammar/CH4.MD)

简单的示例展示了行为:

console.log("3" + "5"); // outputs 35
console.log(+"3" + +"5"); // outputs 8

您也可以像已经一样使用parseInt

两者之间存在差异,例如,请参见这篇文章:parseint vs unary plus-何时使用

尤其是,Parseint将返回一个空字符串的NaN,而+将其归因于0

一个更现代的解决方案是使用array.prototype.reduce方法。

我觉得这更可读,但是如果您要支持比IE9大的浏览器,那么您需要将其用于。

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

最新更新