Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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 - Fatal编程技术网

如何在Javascript中将数字拆分为数字?

如何在Javascript中将数字拆分为数字?,javascript,Javascript,我想把一个数字拆分成它的数字(例如4563到4,5,6,3),然后再拆分成这个数字。(例如:4+5+6+3=18) 我可以写3位数或2位数的代码,并且。。。数字是分开的,但我不能为每个数字写一个全局代码 这是我的两位数代码: var a = 23 var b = Math.floor(a/10); // 2 var c = a-b*10; // 3 var total = b+c; // 2+3 console.log(total); // 5 var a = 456 var b = Math

我想把一个数字拆分成它的数字(例如4563到4,5,6,3),然后再拆分成这个数字。(例如:4+5+6+3=18)

我可以写3位数或2位数的代码,并且。。。数字是分开的,但我不能为每个数字写一个全局代码

这是我的两位数代码:

var a = 23
var b = Math.floor(a/10); // 2
var c = a-b*10; // 3
var total = b+c; // 2+3
console.log(total); // 5
var a = 456
var b = Math.floor(a/100); // 4
var c = a-b*100; // 56
var d = Math.floor(c/10); // 5
var e = c-d*10; // 6
var total = b+d+e; // 4+5+6
console.log(total); // 15
这是我的三位数代码:

var a = 23
var b = Math.floor(a/10); // 2
var c = a-b*10; // 3
var total = b+c; // 2+3
console.log(total); // 5
var a = 456
var b = Math.floor(a/100); // 4
var c = a-b*100; // 56
var d = Math.floor(c/10); // 5
var e = c-d*10; // 6
var total = b+d+e; // 4+5+6
console.log(total); // 15

但是我不能为每个数字编写代码。如何为每个数字编写全局代码?

在现代浏览器中,您可以执行如下数组操作

var num = 4563;
var sum = ('' + num).split('').reduce(function (sum, val) {
    return sum + +val
}, 0)
演示:


首先创建一个数组数字,然后使用reduce对数组中的值求和

此解决方案将数字转换为字符串,将其拆分为字符,并在回调函数中进行处理(
prev
是上一次调用的结果,
current
是当前元素):

进行数字%10(模数)和数字/10(除法),直到数字不为0
var num=4563;
var总和=0;
while(num>0){
总和+=num%10;
num=数学楼层(num/10);
}

控制台日志(总和)我希望以下示例对您有用:

var text="12345";
var total=0;
for (i=0;i<text.length;i++)
{
  total+= parseInt(text[i]);
}    
alert(total);
var text=“12345”;
var合计=0;

对于(i=0;i我将如何处理这个问题。我使用的技巧是对空字符串进行拆分,将字符串转换为数组,然后对数组使用
reduce

function digitSum(n) {
    // changes the number to a string and splits it into an array
    return n.toString().split('').reduce(function(result, b){
        return result + parseInt(b);
    }, 0);
}

正如其他几张海报(向我的评论者提示)所提到的,这个问题还有其他几个好的答案。

以下是我使用ES6箭头函数作为回调函数的解决方案。 -将数字转换为字符串。 -将字符串拆分为数组。 -调用该数组上的map方法。 -回调函数将每个数字解析为一个数组

let number=65535;
//使用MAP将数组返回为数字
让数字=number.toString()
.拆分(“”)
.map(num=>parseInt(num));
//输出到DOM
数字。forEach(
数字=>
document.querySelector(“#out”).innerHTML+=数字+“
” );

1)您可以使用.toString()方法将输入数字强制转换为字符串,并使用spread(…)运算符将其展开为数组

2) 另一条捷径-使用基于递归的解决方案,如:

const splitNumber = n => n ? [ ...splitNumber(n/10|0), n%10 ] : []

我想这就是你想要的。像这样的变量x=3456;var总和=0;虽然(x>0){var a=x%10;sum=sum+a;x=x/10;}但从2015年开始,已经有人在这个问题上提出了这种方法。带解释的代码是很好的东西,它将有助于理解这个概念。