-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/。堆棧溢出是針對**破解的**代碼。 – Claies

+0

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

回答

0

你並不需要使用地圖的所有,如果您轉換爲內減少數。這裏我用了unary + operator將字符串轉換爲數字,而不是數量的構造,但並不比數構造更好的,只是一種習慣:

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