给定问题: 写一个名为“sumDigits”的函数。
给定一个数字,“sumDigits”返回其所有数字的总和。
var output = sumDigits(1148);
console.log(output); // --> 14
如果数字为负数,则第一个数字应计为负数。
var output = sumDigits(-316);
console.log(output); // --> 4
我的代码:
function sumDigits(num) {
return num.toString().split("").reduce(function(a, b){
return parseInt(a) + parseInt(b);
});
}
我的代码解决了正整数的问题。关于如何解决负整数问题的任何提示?拜托,谢谢。
编辑:如果给定的数字为0怎么办?在这种情况下,添加if语句是否可以返回0?
答案 0 :(得分:5)
检查第一个字符是否为-
。如果是这样,b
是您的第一个数字,应该是否定的:
function sumDigits(num) {
return num.toString().split("").reduce(function(a, b){
if (a == '-') {
return -parseInt(b);
} else {
return parseInt(a) + parseInt(b);
}
});
}
答案 1 :(得分:4)
您可以使用String#match
代替String#split
来获取新数组。
function sumDigits(num) {
return num.toString().match(/-?\d/g).reduce(function(a, b) {
return +a + +b;
});
}
console.log(sumDigits(1148)); // 14
console.log(sumDigits(-316)); // 4
答案 2 :(得分:2)
正在寻找没有reduce
功能等的解决方案的人可以采用这种方法。
function sumDigits(num) {
var val = 0, remainder = 0;
var offset = false;
if (num <0) {
offset = true;
num = num * -1;
}
while (num) {
remainder = num % 10;
val += remainder;
num = (num - remainder) / 10;
}
if (offset) {
val -= 2 * remainder;//If the number was negative, subtract last
//left digit twice
}
return val;
}
var output = sumDigits(-348);
console.log(output);
output = sumDigits(348);
console.log(output);
output = sumDigits(1);
console.log(output);
答案 3 :(得分:0)
//Maybe this help: // consider if num is negative:
function sumDigits(num){
let negativeNum = false;
if(num < 0){
num = Math.abs(num);
negativeNum = true;
}
let sum = 0;
let stringNum = num.toString()
for (let i = 0; i < stringNum.length; i++){
sum += Number(stringNum[i]);
}
if(negativeNum){
return sum - (Number(stringNum[0]) * 2);
// stringNum[0] has the "-" sign so deduct twice since we added once
} else {
return sum;
}
}