2016-11-10 6 views
0

大きな数字が入力として表示され、1000ステップ(3桁ごと)ごとに小さなスペースで表示します。だから私は最大の配列を探しています。出力として3桁。数字をJavascriptの3桁のリストに変換してください。

例:

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

出力配列は、文字列や数値が含まれている場合、それは問題ではありません。

Javascript ES6で最も洗練された(包括的な/簡潔な)ソリューションは何でしょうか?


は、私は2つの作業ソリューションを書いたが、私は彼らが過度に複雑であることを感じてか、私は何か欠けていること:

ソリューションを1)

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

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

ソリューション2)

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-commers-as-thousand-separators-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

関連する問題