2017-06-21 12 views
0

私は、すべての数字の合計を返す関数を持っています。数値を分割してすべてを加算する - JavaScript

splitメソッドを使用して文字列に変換した後、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

文字列として扱い、文字列を ' - 'でチェックし、2つの文字を取得して整数に変換して配列にプッシュする必要があると思います。次に、配列をループして合計します。もちろん、あなたが行くと、配列にそれらをプッシュする気にしないであなたはそれを行うことができます。

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