Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回一个数字的和(正或负)_Javascript_Arrays_Sum_Digits - Fatal编程技术网

Javascript 返回一个数字的和(正或负)

Javascript 返回一个数字的和(正或负),javascript,arrays,sum,digits,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(

我需要做一个函数,它接受一个数字并返回它的数字之和,如果数字是负数,那么在添加数字时,第一个数字应该被视为负数,这就是我所拥有的:

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);
var arrx=[];
操作变量;
var=0;
函数数(num){
//你的代码在这里
变量y=num.toString();
var c=y.分割(“”);
c、 forEach((h)=>arrx.push(数(h));
if(num<0){
oper=-arrx[0];
对于(var z=1;za+b);
}
三位数(1234);

当给定负数时,函数返回NaN,有什么问题吗?

如果是负数,第一个字符是“-”减去符号。当您试图将其转换为数字时,您得到的是
NaN
。之后,如果您尝试将
NaN
添加到任何数字,结果将是
NaN

作为解决方案,如果数字为负数,则需要忽略第一个数字

因此,您可以进行如下代码更改

if(z === 1){
    others = others - arrx[z];
    }else{
     others += arrx[z];
      }
并将负数情况下的返回改为
返回其他

下面的代码应该可以工作

var arrx=[];
操作变量;
var=0;
函数数(num){
//你的代码在这里
变量y=num.toString();
var c=y.分割(“”);
c、 forEach((h)=>arrx.push(数(h));
if(num<0){
对于(var z=1;za+b);
}

console.log(sumdights(-1234))使用优化的简短版本的
sumdights()
函数:

函数sumdights(num){
var isNeg=num<0,//检查数字是否为负数
numbers=(isNeg?String(num).slice(1):String(num)).split(“”).map(Number);
如果(isNeg)数字[0]*=-1;//“正在恢复”该数字的符号
returnnumber.reduce(函数(a,b){returna+b;});
}
控制台日志(sumDigits(1234));

console.log(sumdights(-951))如果我忽略它,结果将不会是一个负数的情况下好。检查后的代码,它应该工作,它几乎是一样的,除了
return
if
条件之外。当
c
已经是一个数组时,为什么要将数字推送到数组中?我建议开发一种直接处理数字的算法,而不是将数字转换成字符串。你能想出一种从数字中得到一位数的方法吗?你如何得到除一位数以外的其余数字?我很难理解数字的值。如果我把它写出来,它会像这样吗<代码>if(isNeg){String(num).slice(1);}else{String(num);}numbers.split(“”).map(Number)
?@FrancisNgo,您忘记将条件的结果分配给
numbers
var numbers=if(isNeg){String(num).slice(1);}else{String(num);}numbers.split(“”).map(Number)?否,
如果(isNeg){numbers=String(num).slice(1);}否则{numbers=String(num);}
。但它看起来并不比原版好多少