2017-06-21 43 views
0

我有一個函數返回所有數字的總和對於正數和負數。分割數字並將它們全部添加 - JavaScript

我使用拆分方法並將其先轉換爲字符串,然後使用reduce將它們全部添加。如果這個數字是負數,那麼第一個數字應該算作負數。

function sumDigits(num) { 
var output = [], 
sNum = num.toString(); 

for (var i = 0; i < sNum.length; i++) { 
    output.push(sNum[i]); 
} 

return output.reduce(function(total, item){ 
    return Number(total) + Number(item); 
}); 

} 
var output = sumDigits(1148); 
console.log(output); // --> MUST RETURN 14 

var output2 = sumDigits(-316); 
console.log(output2); // --> MUST RETURN 4 

,而不是返回的總和,它返回4592 -1264

我這樣做是正確的還是我需要使用split功能?或者有沒有更好的方法來做到這一點?

對不起,新手在這裏。

+0

'output.push(SNUM);'你認爲什麼是幹什麼的? – epascarello

+0

我想你會找到你的答案[這裏](https://stackoverflow.com/questions/7784620/javascript-number-split-into-individual-digits)。 – Ozan

+0

您需要推送'sNum [i]'。並跳過'-'。 –

回答

1

我認爲你必須把它當作一個字符串,並檢查遍歷字符串檢查' - ',當你發現一個抓取兩個字符並轉換爲一個整數以推送到數組上。然後遍歷數組並對它們進行求和。當然,你可以隨心所欲地做到這一點,而不必費力地將它們推向陣列。

function sumDigits(num) { 
 
    num = num + ''; 
 
    var output = []; 
 
    var tempNum; 
 
    var sum = 0; 
 

 
    for (var i = 0; i < num.length; i++) { 
 
    if (num[i] === '-') { 
 
     tempNum = num[i] + num[i + 1]; 
 
     i++; 
 
    } else { 
 
     tempNum = num[i]; 
 
    } 
 
    
 
    output.push(parseInt(tempNum, 10)); 
 
    } 
 
    
 
    
 
    for (var j = 0; j < output.length; j++) { 
 
    sum = sum + output[j]; 
 
    } 
 

 
    return sum; 
 
} 
 

 
var output = sumDigits(1148); 
 
console.log(output); // --> MUST RETURN 14 
 

 
var output2 = sumDigits(-316); 
 
console.log(output2); // --> MUST RETURN 4

相關問題