2015-05-04 148 views
1

我想将一个数字拆分成数字(例如4563到4,5,6,3),然后使这个数字成瘾。 (例如:4 + 5 + 6 + 3 = 18)如何在Javascript中将数字拆分为数字?

我可以编写代码为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 

,但我不能写代码,每个编号的工作。我怎样才能为每个数字编写全局代码?

+2

http://stackoverflow.com/questions/9138064/sum-of-the-digits-of- a-number-javascript – BeNdErR

+1

我猜是http://stackoverflow.com/a/7784630/3894168是你想要的。 – Zee

回答

3

var num = 4563; 
 
var sum = 0; 
 
while(num > 0) { 
 
    sum += num % 10; 
 
    num = Math.floor(num/10); 
 
} 
 
console.log(sum);

4

在现代的浏览器,你可以像数组操作

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

演示:Fiddle

,你首先要创建一个数组的数字,然后使用减少阵列中总结的值

0

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

var a = 456; 
var sum = a.toString().split("").reduce(function(prev, current){ 
    return parseInt(prev) + parseInt(current) 
}) 
0

待办事项数量%10(模数),然后数/ 10(分),直到数不为0

+0

类似这样的 var x = 3456; var sum = 0; (x> 0) { \t var a = x%10; \t sum = sum + a; \t x = x/10; } –

0

我希望下面的例子是对你有用:

var text="12345"; 
var total=0; 
for (i=0;i<text.length;i++) 
{ 
    total+= parseInt(text[i]); 
}  
alert(total); 
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); 
} 

至于其他几个海报(帽尖到我的评论者)提到的,有这个问题其他几个很好的答案为好。

+1

从2015年开始,这个问题已经有[另一个答案](http://stackoverflow.com/a/30025928),它暗示了这种方法。 [实际上是两个](http://stackoverflow.com/a/30025921)。 – Bryan

0

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

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>

0

1)你可以施放输入数字字符串,使用的ToString()方法,并展开与传播阵列(...)运算符

const splitNumber = n => [ ...n.toString() ] 

2)另一种短的方式 - 使用基于递归的解决方案,如:

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

解释代码是美好的东西,它有助于理解概念。 –

相关问题