Return 数字的总和(正数或负数)
Return sum of a number (positive or negative)
我需要制作一个函数,它接受一个数字和 returns 它的数字之和,如果数字是负数,那么在添加数字时第一个数字应该被认为是负数,这就是我所拥有的:
var arrx = [];
var oper;
var others = 0;
function sumDigits(num) {
// your code here
var y = num.toString();
var c = y.split("");
c.forEach((h) => arrx.push(Number(h)) );
if (num < 0){
oper = -arrx[0];
for (var z = 1; z < arrx.length; z++){
others += arrx[z];
}
return others + oper;
}
return arrx.reduce((a,b) => a+b);
}
sumDigits(1234);
当给定负数时,函数returnsNaN,有什么问题?
如果是负数,第一个字符是'-' 减去 符号。当您尝试将其转换为数字时,您会得到 NaN
。之后,如果您尝试将 NaN
添加到任何数字,结果将是 NaN
.
作为解决方案,如果数字为负数,则需要忽略第一个数字。
因此,您可以像这样更改代码
if(z === 1){
others = others - arrx[z];
}else{
others += arrx[z];
}
并将负数的 return 更改为 return others;
以下代码应该可以工作。
var arrx = [];
var oper;
var others = 0;
function sumDigits(num) {
// your code here
var y = num.toString();
var c = y.split("");
c.forEach((h) => arrx.push(Number(h)) );
if (num < 0){
for (var z = 1; z < arrx.length; z++){
if(z === 1){
others = others - arrx[z];
}else{
others += arrx[z];
}
}
return others;
}
return arrx.reduce((a,b) => a+b);
}
console.log(sumDigits(-1234));
使用 sumDigits()
函数的优化和简短版本:
function sumDigits(num) {
var isNeg = num < 0, // check whether the number is negative
numbers = (isNeg? String(num).slice(1) : String(num)).split('').map(Number);
if (isNeg) numbers[0] *= -1; // 'recovering' the number's sign
return numbers.reduce(function(a,b){ return a + b; });
}
console.log(sumDigits(1234));
console.log(sumDigits(-951));
我需要制作一个函数,它接受一个数字和 returns 它的数字之和,如果数字是负数,那么在添加数字时第一个数字应该被认为是负数,这就是我所拥有的:
var arrx = [];
var oper;
var others = 0;
function sumDigits(num) {
// your code here
var y = num.toString();
var c = y.split("");
c.forEach((h) => arrx.push(Number(h)) );
if (num < 0){
oper = -arrx[0];
for (var z = 1; z < arrx.length; z++){
others += arrx[z];
}
return others + oper;
}
return arrx.reduce((a,b) => a+b);
}
sumDigits(1234);
当给定负数时,函数returnsNaN,有什么问题?
如果是负数,第一个字符是'-' 减去 符号。当您尝试将其转换为数字时,您会得到 NaN
。之后,如果您尝试将 NaN
添加到任何数字,结果将是 NaN
.
作为解决方案,如果数字为负数,则需要忽略第一个数字。
因此,您可以像这样更改代码
if(z === 1){
others = others - arrx[z];
}else{
others += arrx[z];
}
并将负数的 return 更改为 return others;
以下代码应该可以工作。
var arrx = [];
var oper;
var others = 0;
function sumDigits(num) {
// your code here
var y = num.toString();
var c = y.split("");
c.forEach((h) => arrx.push(Number(h)) );
if (num < 0){
for (var z = 1; z < arrx.length; z++){
if(z === 1){
others = others - arrx[z];
}else{
others += arrx[z];
}
}
return others;
}
return arrx.reduce((a,b) => a+b);
}
console.log(sumDigits(-1234));
使用 sumDigits()
函数的优化和简短版本:
function sumDigits(num) {
var isNeg = num < 0, // check whether the number is negative
numbers = (isNeg? String(num).slice(1) : String(num)).split('').map(Number);
if (isNeg) numbers[0] *= -1; // 'recovering' the number's sign
return numbers.reduce(function(a,b){ return a + b; });
}
console.log(sumDigits(1234));
console.log(sumDigits(-951));