在数组中添加数字。获得奇怪的输出。使用Javascript

时间:2014-12-03 23:45:34

标签: javascript arrays function sum

    var array = [];        
    getNum();
    document.write(array);
    document.write("<br>Sum: " + sum(array));

    //Function to Sum Array
    function sum(params){
        var total = 0 ;
        for (i = 0; i < params.length; i++){
            total += params[i];
        }
        return total;
    }


    //Function to get Numbers in Array
    function getNum(){
        var count = 0;
        alert("Please enter 5 numbers");
        while(count < 5) {
            array[count] = prompt("Number " + (count + 1));
            count++;
        }
    }

当前输出

5,4,3,2,1
Sum: 054321

我想要什么

5,4,3,2,1
Sum: 15

我正在尝试创建一个程序,用户在数组中添加数字,程序会计算这些数字的不同内容。

当我调用sum(数组)时;使用预设数组,如var array = [5,4,3,2,1];求和工作正常,并按预期输出15 但是,当我包含用于获取数组的数字集的函数时,而不是具有预设数组,输出的总和为054321。

为了我自己的理解,我想手动进行数组计算,而不是使用reduce();

我做错了什么?

6 个答案:

答案 0 :(得分:4)

将您的提示值解析为整数 - 将其添加为字符串并与+符号连接:

array[count] = parseInt(prompt("Number " + (count + 1)));

http://jsfiddle.net/4kp825tc/

MDN also recommendsNumber转换为另一个选项:

  

请注意,结果是一个字符串。这意味着你有时应该   转换用户给出的值。例如,如果他的回答应该是   一个数字,你应该将值转换为数字。 var aNumber =   Number(window.prompt(“键入数字”,“”));

答案 1 :(得分:1)

   //Function to Sum Array
    function sum(params){
        var total = 0 ;
        for (i = 0; i < params.length; i++){
            var temp = parseInt(params[i]);
            total += temp;
        }
        return total;
    }

答案 2 :(得分:1)

您的输入存储为数组中的字符串。您需要将值转换为数字才能使求和正确发生。

使用parseInt(设置为基数10)来获得正确的答案。

        total += parseInt(params[i],10);

http://jsfiddle.net/biz79/x9cbm7Lj/

答案 3 :(得分:0)

来自提示的值是字符串,这就是为什么不按照你希望在params [i]之前加上加号而你正确的

var array = [];        
getNum();
document.write(array);
document.write("<br>Sum: " + sum(array));

//Function to Sum Array
function sum(params){
    var total = 0 ;
    for (i = 0; i < params.length; i++){
        total += +params[i]; //make the params[i] to be a number
    }
    return total;
}


//Function to get Numbers in Array
function getNum(){
    var count = 0;
    alert("Please enter 5 numbers");
    while(count < 5) {
        array[count] = prompt("Number " + (count + 1));
        count++;
    }
}

答案 4 :(得分:0)

这是一个单线解决方案:

function sum(params) {
    return params.map(function(item) { return parseInt(item); }).sum()
}

答案 5 :(得分:0)

将所有内容都相同,只需将用户输入解析为整数即可。这里的问题是数字被视为字符串。

像这样修改你的和函数:

//Function to Sum Array
function sum(params){
    var total = 0 ;
    for (i = 0; i < params.length; i++){
    $num = parseInt(params[i]);
    total += $num;
    }
    return total;
}

那就是你,你已经完成了。