2016-11-10 61 views
0

我得到大數字作爲輸入,並且希望以千位(每3位數)的每一步顯示一個小空間。所以我正在尋找一個最大數組。三位數字作爲輸出。將數字轉換爲Javascript中的三位數字的列表

實例:

Input: 10  Output: [10] 
Input: 1234  Output: [1, 234] 
Input: 24521280 Output: [23, 521, 280] 

如果輸出數組包含字符串或數字不要緊。

什麼是Javascript ES6中最優雅(全面/短小)的解決方案?


我寫了兩個可行的解決方案,但我覺得他們是過於複雜或者說,我失去了一些東西:

解決方法1)

function numberToThreeDigitArray(number) { 
    if (number/1000 < 1) return [number]; 

    return [ 
    ...numberToThreeDigitArray(Math.floor(number/1000)), 
    number % 1000 
    ]; 
} 

方案二)

function numberToThreeDigitArray(number) { 
    return number.toString().split('').reverse().map((char, i) => { 
    return i !== 0 && i % 3 === 0 
     ? ' ' + char 
     : char; 
    }).join('').split('').reverse().join('').split(' '); 
} 
+3

你失蹤的事情是,從而根據用戶的區域設置一個數字是一個解決的問題:http://stackoverflow.com/questions/2901102/how-to-print -a-number-with-commas-as-thousands-separator-in-javascript – Jamiec

+0

'number.toLocaleString()。split(「,」)。map(x => parseInt(x));' – halfo

+0

@Jamiec Aaah! !與正則表達式的解決方案是我正在尋找 – kadrian

回答

0

number.toLocaleString().split(',').map(num => +num)應該爲你做。

查看toLocaleString MDN docs

例子:

const arr = (24521280).toLocaleString().split(',').map(num => +num) 

// [24, 521, 280] 

// or 

function getNumber(n) { 
    return n.toLocaleString().split(',').map(num => +num) 
} 
+0

爲什麼不只是'.map(Number)'而不是一元黑客? – naomik

相關問題