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

相关问题