返回数字的总和(正数或负数)

时间:2017-01-29 22:38:42

标签: javascript arrays sum digits

我需要创建一个带数字并返回其数字之和的函数,如果数字为负数,则在添加数字时应将第一个数字视为负数,这就是我所拥有的:

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

当给出负数时,函数返回NaN,问题是什么?

2 个答案:

答案 0 :(得分:1)

如果是负数,则第一个字符是' - '减号符号。当您尝试将其转换为数字时,您将获得NaN。之后,如果您尝试将NaN添加到任意数字,结果将为NaN

作为分辨率,如果数字为负数,则需要忽略第一个数字。

因此,您可以进行类似

的代码更改
if(z === 1){
    others = others - arrx[z];
    }else{
     others += arrx[z];
      }

并将负数更改为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));

答案 1 :(得分:1)

使用sumDigits()函数的优化和简短版本:

&#13;
&#13;
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));
&#13;
&#13;
&#13;