Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 求和一个数';s数字_Javascript_Algorithm - Fatal编程技术网

Javascript 求和一个数';s数字

Javascript 求和一个数';s数字,javascript,algorithm,Javascript,Algorithm,下面是我的代码。有人能看出我犯的错误吗? 编写一个名为sumdights的函数,该函数将数字作为输入,并返回每个数字的十进制数字的绝对值之和。例如: sumDigits(10); // Returns 1 sumDigits(99); // Returns 18 sumDigits(-32); // Returns 5 Let's assume that all numbers in the input will be integer values. function sumDigits(

下面是我的代码。有人能看出我犯的错误吗?

编写一个名为sumdights的函数,该函数将数字作为输入,并返回每个数字的十进制数字的绝对值之和。例如:

sumDigits(10);  // Returns 1
sumDigits(99);  // Returns 18
sumDigits(-32); // Returns 5
Let's assume that all numbers in the input will be integer values.

function sumDigits(number) {
  let numberstring = number.toString()
  let numberarr = numberstring.split("")
  let counter = 0
  for(var i=0; i<numberarr.length; i++) {
    if(typeof numberarr[i] === "number") {
        console.log(numberarr[i])
        let numbervalue = Number(numberarr[i])
        console.log(numbervalue)  
        counter += numbervalue
    } else if (typeof numberarr[i] !== "number"){
      counter += 0
    }
  } 
  return counter
}
sumdights(10);//返回1
数字总和(99);//返回18
总和数字(-32);//返回5
让我们假设输入中的所有数字都是整数值。
功能数字(数字){
让numberstring=number.toString()
设numberrarr=numberstring.split(“”)
设计数器=0
对于(var i=0;i请尝试以下解决方案:

console.log(sumdights(-103));//返回4
功能数字(数字){
var numberstring=number.toString();
var计数器=0;
对于(var i=0;i

if(编号的类型[i]=“编号”)

语句总是false,因为在将数字转换为字符串之前,我认为函数总是返回零

console.log(Math.abs(sumDigits(10)));  // Returns 1
console.log(Math.abs(sumDigits(99)));  // Returns 1
console.log(Math.abs(sumDigits(-32)));  // Returns 1 // Returns 5
//Let's assume that all numbers in the input will be integer values.

function sumDigits(number) {
  var counter = 0;
    var remainder;
    number=Math.abs(number);
        while(number>0){
            counter=counter+number%10;
            number=Math.floor(number/10);
        }
        return counter;
  } 
我想你正在寻找这样的代码。我不明白你为什么要把数字转换成字符串

number=Math.abs(number); this line first convert any negative number to positive.

sumDigits(number) takes an argument as now loop through the number until number < 0 then add the remainder to counter variable then return counter as final sum
number=Math.abs(number);此行首先将任何负数转换为正数。
sumDigits(number)接受一个参数,现在循环遍历该数字,直到number<0,然后将余数添加到计数器变量,然后返回计数器作为最终和

如果你想知道为什么你的代码片段不起作用,那么giovybus&Raman的答案是正确的——这是因为编号者[I]的引用总是一个字符串。编号者是一个字符串数组,而不是一个数字数组,你需要在使用之前将其转换为一个数字。对以上代码的调整如下

sumdights(10);//返回1
sumdights(99);//返回18
三位数(-32);
功能数字(数字){
让numberstring=number.toString().replace(“-”,”);
设numberrarr=numberstring.split(“”)
设计数器=0

对于(var i=0;i,使用filter和reduce来计算总数

<代码>功能数字(数字){ 返回([…number.toString()] .filter((char)=>!isNaN(parseInt(char))) .reduce(函数(a,b){返回a+parseInt(b)},0)); } 常数sum1=sum1位数(103); console.log(sum1); 常数sum2=sum2位数(-105);
console.log(sum2);
您遇到了什么问题?问题是
typeof numberrar[i]==“number”
将始终是
false
,因为
numberrar
包含
string
s。它不会遍历第一个if语句……您可以用它来替换它,这是否回答了您的问题?试试sumdights(-103)