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