2015-05-04 147 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

解釋代碼是美好的東西,它有助於理解概念。 –

相關問題