2014-12-03 26 views
0
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++; 
     } 
    } 

電流輸出在數組中添加數字。得到奇怪的輸出。 JavaScript的

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

我想要什麼

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

我試圖在用戶添加號碼數組和程序對計算這些數字不同的東西做一個節目。

當我調用sum(array)時;使用預設數組,例如var array = [5,4,3,2,1];求和運行良好,並按預期輸出15。
但是而不是預設陣,當我包括函數來獲取一組數字爲陣,求和輸出是054321.

我想做的陣列計算人工爲我自己理解的緣故,而不是使用reduce();

我在做什麼錯?

+0

您將輸入數字保存爲數組作爲字符串,所以sum函數正在執行字符串連接,您需要先將'prompt()'的返回值解析爲'int',然後再將其添加到數組中。 – jmoerdyk 2014-12-03 23:52:09

回答

4

解析您的提示值作爲整數 - 它被添加爲一個字符串,然後連接起來與+標誌:

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

http://jsfiddle.net/4kp825tc/

MDN also recommends投作爲Number作爲另一種選擇:

請注意結果是一個字符串。這意味着您有時應該投入由用戶給出的值 。例如,如果他的答案應該是 一個數字,則應將該值轉換爲數字。 var aNumber = Number(window.prompt(「Type a number」,「」));

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; 
    } 
+0

在javascript中使用parseInt時,您總是希望包含radix參數。 JS會將以0開頭的數字(例如'09')視爲八進制數字,並將以0x開頭的數字視爲十六進制。 'parseInt函數(PARAMS [I],10)'。 – 2014-12-03 23:56:10

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++; 
    } 
} 
1

你輸入存儲爲字符串你的數組。您需要將該值轉換爲數字才能正確發生總和。

使用parseInt(設置爲10)來得到正確的答案。

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

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

0

這裏有一個單行的解決方案:

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

保存代碼爲高爾夫的代碼。 – AlienWebguy 2014-12-03 23:57:58

0

盡一切一樣的,只是分析用戶輸入一個整數。這裏的問題是數字被視爲字符串。

修改您的SUM函數是這樣的:

//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; 
} 

就是這樣,你就大功告成了。