我想将一个数字拆分成数字(例如4563到4,5,6,3)然后成瘾这个数字。 (例如:4 + 5 + 6 + 3 = 18)
我可以单独编写3位数或2位数的代码和...数字,但我不能为每个数字写一个全局代码。
所以这是我的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
这是我的3位数字代码:
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
但我无法编写代码来处理每个数字。如何为每个数字编写全局代码?
答案 0 :(得分:5)
在现代浏览器中,您可以执行类似
的数组操作var num = 4563;
var sum = ('' + num).split('').reduce(function (sum, val) {
return sum + +val
}, 0)
演示:Fiddle
首先创建数组数字,然后使用reduce来汇总数组中的值
答案 1 :(得分:3)
var num = 4563;
var sum = 0;
while(num > 0) {
sum += num % 10;
num = Math.floor(num / 10);
}
console.log(sum);

答案 2 :(得分:0)
此解决方案将数字转换为字符串,将其拆分为字符并在回调函数中处理它们(prev
是前一次调用的结果,current
是当前元素):
var a = 456;
var sum = a.toString().split("").reduce(function(prev, current){
return parseInt(prev) + parseInt(current)
})
答案 3 :(得分:0)
数字%10(模数)然后数字/ 10(除数)直到数字不为0
答案 4 :(得分:0)
我希望以下示例对您有用:
var text="12345";
var total=0;
for (i=0;i<text.length;i++)
{
total+= parseInt(text[i]);
}
alert(total);
答案 5 :(得分:0)
以下是我如何处理这个问题。我使用的技巧是拆分空字符串以将字符串转换为数组,然后在数组上使用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);
}
正如其他一些海报(我的评论者的小贴士)所提到的,这个问题还有其他几个很好的答案。
答案 6 :(得分:0)
以下是使用ES6箭头功能作为回叫的解决方案。 - 将数字转换为字符串。 - 将字符串拆分为数组。 - 在该数组上调用map方法。 - 回调函数将每个数字解析为数组。
let number = 65535;
//USING MAP TO RETURN AN ARRAY TO DIGITS
let digits = number.toString()
.split("")
.map(num => parseInt(num));
//OUTPUT TO DOM
digits.forEach(
digit =>
document.querySelector("#out").innerHTML += digit + "<br>"
);
<p id="out"></p>
答案 7 :(得分:0)
1)您可以使用.toString()方法将输入数字转换为字符串,并使用spread(...)运算符将其展开为数组
const splitNumber = n => [ ...n.toString() ]
2)另一种简短的方法 - 使用基于递归的解决方案,如:
const splitNumber = n => n ? [ ...splitNumber(n/10|0), n%10 ] : []