2012-03-28 92 views
30

這是我到目前爲止的代碼:如何在JavaScript中將整數分隔成數組中的單獨數字?

var n = 123456789; 
var d = n.toString().length; 
var digits = []; 
var squaredDigits = []; 
for (i = d; i >= 1; i--) { 
    var j = k/10; 
    var r = (n % k/j) - 0.5; 
    var k = Math.pow(10, i); 
    var result = r.toFixed(); 
    digits.push(result); 
} 

console.log(digits); 

但是當我運行我的代碼,我得到這個:[9, 1, 2, 3, 4, 5, 6, 7, 8]

如果任何人都可以看到的問題,或者找到更好的解決方案,我將非常感激!

回答

54

爲什麼不這樣做呢?

var n = 123456789; 
var digits = (""+n).split(""); 
+14

只是一個說明,這將給出一串字符串..不是數字。 – rgthree 2012-03-28 19:24:09

+0

好點。但從它的角度來看,這個數字會自我增加,我相信這樣做很好。所有必須做的事情都要小心,並且可能在適當的時候使用'parseInt(...,10);'。 – 2012-03-28 19:28:47

+0

問題是我想要數字後面的數字,我相信我不能用一個字符串做到這一點? – magnusbl 2012-03-29 07:37:30

37
(123456789).toString(10).split("") 

^^這將返回一個字符串數組

(123456789).toString(10).split("").map(function(t){return parseInt(t)}) 

^^這將返回整數數組

+0

這也將給一串字符串..不是數字 – rgthree 2012-03-28 19:25:13

+0

好!請注意,.map在IE 8或更低版本中不可用。 – rgthree 2012-03-28 19:31:11

+0

人們會期望'map(parseInt)'工作,但是'Array.map'也會用索引和數組本身調用函數(它真的有必要嗎?),所以它不起作用。 – tokland 2012-12-17 17:03:01

1

移動:上述

var k = Math.pow(10, i); 

var j = k/10; 
20

我意識到這是問幾個月前,但我有一個除了samccone的答案,這是更簡潔,但我沒有代表添加註釋!

相反的:

(123456789).toString(10).split("").map(function(t){return parseInt(t)}) 

考慮:

(123456789).toString(10).split("").map(Number) 
+3

10在'''.toString(10)'''中做了什麼?我知道它引用了基數10,但我已經測試了它,並且無法找到可辨別的差異。謝謝!另外,很酷的編輯。 – EFH 2016-03-29 00:15:51

+0

@EFH如果未指定基數,則首選基數假定爲10. Ref(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString) – jtlindsey 2016-06-30 02:01:03

+0

只想在這裏放棄一個「驚人的解決方案」。 – Ted 2016-11-23 10:09:25

3

const toIntArray = (n) => ([...n + ""].map(v => +v))

10

什麼:

const n = 123456; 
Array.from(n.toString()).map(Number); 
// [1, 2, 3, 4, 5, 6] 
+5

不錯的解決方案,清晰易懂,並利用ES6功能。另外推薦的功能之一是[這裏](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map?v=control) – 2017-06-02 05:39:42

+0

'.map(Number)'很太好了! – Lonely 2017-12-28 21:40:50

0
var num = 123456789; 
num = num.toString(); //'123456789' 
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ] 
+1

雖然這段代碼可能會回答這個問題,但提供關於如何解決問題和/或爲什麼解決問題的額外上下文會提高答案的長期價值。 – 2017-05-23 11:09:13

0

這個問題已經超過5年了,但總是歡迎有效的編碼/腳本編寫方法。

var n = 123456789; 
var arrayN = (`${n}`).split("").map(e => parseInt(e))