-1

高次関数を使っていくつかの練習問題に取り組んでいますが、私はこの問題を解決することができました。私は助けることができないが、このコードは醜いと思うが、それは最も雄弁ではないと思う。マップを組み合わせる方法はありますか?削減は、私が行ったよりもクリーンな方法ですか?さらに、私がここで使用できた他の方法や改良点はありますか?私はちょうど良くなるように探しています、そして、どんなフィードバックも評価されるでしょう。このコードをクリーンアップしてより雄弁に書くにはどうすればよいですか?

問題:数値を指定すると、「sumDigits」はすべての桁の合計を返します。数値が負の場合、最初の桁は負としてカウントされます。

function sumDigits(num) { 
 

 
    //create array of number char 
 
    var string = num.toString().split(''); 
 

 
    //if first char is negative symbol let the first numeric element be negative 
 
    if (string[0] === "-") { 
 
    string[1] = '-' + string[1]; 
 
    string.shift(); 
 
    } 
 

 
    //convert string to int 
 
    var toInteger = string.map(function(x) { 
 
    return Number(x); 
 
    }); 
 

 
    //get sum 
 
    return toInteger.reduce(function(sum, current) { 
 
    sum += current; 
 
    return sum; 
 
    }) 
 
} 
 

 
sumDigits(-316);

+8

はhttps://codereview.stackexchange.com/を試してみてください。スタックオーバーフローは** broken **コードです。 – Claies

+0

他の方法https://stackoverflow.com/questions/38334652/sum-all-the-digits-of-a-number-javascript – wrangler

答えて

0

あなたは減らすの内側に数値に変換する場合は、すべてでマップを使用する必要はありません。ここで私は数の代わりに、Numberコンストラクタに文字列を変換するためにunary + operatorを使用し、それはNumberコンストラクタよりも良いではない、単なる習慣:

function sumDigits (num) { 
    const chars = num.toString().split(''); 

    // Subtract first digit if the string starts with a '-' 
    // Needs to be subtracted twice, since it is included in the sum 
    return (chars[0] === '-' ? -2*chars[1] : +chars[0]) + 
     chars.slice(1).reduce((sum, value) => sum + +value, 0) 
    ; 
} 
関連する問題