问题:
编写一个名为
sumDigits
的函数。给定一个数字,
sumDigits
返回其所有数字的总和。
var output = sumDigits(1148);
console.log(output); // --> 14
如果数字为负数,则第一个数字应计为负数。
var output = sumDigits(-316);
console.log(output); // --> 4
这是我目前已编码的内容,它适用于正值,但我无法解决在给定负值时如何解决问题。当-316
被放入函数时,会返回NaN
,我知道当我toString().split('')
时,这是返回的内容:['-', '3', '1', '6']
。如何处理索引0和1的组合?
function sumDigits(num) {
var total = 0;
var newString = num.toString().split('');
for (var i = 0; i < newString.length; i ++) {
var converted = parseInt(newString[i]);
total += converted;
}
return total;
}
sumDigits(1148);
我应该使用哪些方法的任何提示?是否有更明智的方式来看待这个?
答案 0 :(得分:1)
这应该这样做:
function sumDigits(num) {
var total = 0;
var newString = num.toString().split('');
for (var i = 0; i < newString.length; i ++) {
if(newString[i]==='-') { //check to see if the first char is -
i++; //if it is, lets move to the negative number
var converted = parseInt(newString[i]); // parse negative number
total -= converted; // subtract value from total
continue; // move to the next item in the loop
}
var converted = parseInt(newString[i]);
total += converted;
}
return total;
}
console.log(sumDigits(-316));
&#13;
答案 1 :(得分:1)
这样做的一种方法是进行拆分,将第一位和第一位保持在一起,而不是拆分。
您可以使用正则表达式执行此操作,并使用match
代替split
:
var newString = num.toString().match(/-?\d/g);
function sumDigits(num) {
var total = 0;
var newString = num.toString().match(/-?\d/g);
for (var i = 0; i < newString.length; i++) {
var converted = parseInt(newString[i]);
total += converted;
}
return total;
}
var result = sumDigits(-316);
console.log(result);
在较短的版本中,您可以使用map
和reduce
,如下所示:
function sumDigits(num) {
return String(num).match(/-?\d/g).map(Number).reduce( (a, b) => a+b );
}
console.log(sumDigits(-316));
答案 2 :(得分:1)
您始终可以将plot(data$measured~data$fitted, ylab = expression("Measured Length (" * mu ~ "m)"),
xlab = expression("NIR Fitted Length (" * mu ~ "m)"), cex.lab=1.5, cex.axis=1.5)
与函数一起用作参数:
String#replace
答案 3 :(得分:0)
有没有更智能的方式来看待这个?
您可以使用模运算符提取最后一位数字,从而避免从数字到字符串的转换。重复此步骤,直到找到所有数字:
function sumDigits(num) {
let total = 0, digit = 0;
while (num != 0) {
total += digit = num % 10;
num = (num - digit) * 0.1;
}
return total < 0 ? digit + digit - total : total;
}
console.log(sumDigits(-316)); // 4
console.log(sumDigits(1148)); // 14
console.log(sumDigits(Number.MAX_SAFE_INTEGER)); // 76