2015-12-05 47 views
1

我需要一個函數,給定數字,比如123,將輸出數組[100,20,3]。我已經試過這樣的事情(從SO另一個問題借來的):將數字轉換爲數十,數百,數千

function separateNumberIntoUnits(n) { 
    var arr = []; 
    var i = 10; 

    while (n > i/10) 
    { 
     arr.unshift(n % i - n % (i/10)); 
     i *= 10; 
    } 

    return arr; 
} 

,它適用於所有數字,除了10,100等我試圖弄清楚發生了什麼事情,但數學ISN我的堅強的一面......

如果有一個更有效的方法來做到這一點,隨時寫你自己的解決方案。

回答

4

我覺得這是最有效的方法:

function separateNumberIntoUnits(n) { 
 
    if (n == 0) return [0]; 
 
    // n = Math.floor(n); // needed for decimal numbers 
 
    var arr = []; 
 
    var i = 1; 
 

 
    while (n > 0) { 
 
    arr.unshift((n % 10) * i); 
 
    n = Math.floor(n/10); 
 
    i *= 10 
 
    } 
 

 
    return arr; 
 
} 
 

 
document.writeln(separateNumberIntoUnits(1234) + "<br />") 
 
document.writeln(separateNumberIntoUnits(100) + "<br />") 
 
document.writeln(separateNumberIntoUnits(10) + "<br />") 
 
document.writeln(separateNumberIntoUnits(1) + "<br />") 
 
document.writeln(separateNumberIntoUnits(0) + "<br />")

unshift是做到這一點的最好辦法:Array.unshift VS的Array.push和Array.reverse:https://jsperf.com/array-unshift-vs-array-push-and-array-reverse

1

您可以將數字視爲一個字符串。

拆分成它的數字陣列,然後map每個數字到其小數位由以10爲適當的功率乘以:無數學

function separateNumberIntoUnits(n) { 
 
    var s= n.toString().split(''); 
 
    
 
    return s.map(function(digit, n) { 
 
    return digit * Math.pow(10, s.length - n - 1); 
 
    }); 
 
} 
 

 
document.body.innerHTML= 
 
    separateNumberIntoUnits(1234) + '<br>' + 
 
    separateNumberIntoUnits(100) + '<br>' + 
 
    separateNumberIntoUnits(0);

+0

...但它不會有效;) – CoderPi

+0

哈,總是人羣中的實用主義者:) –

0

A液:

function s(n) { 
 
    return n.toString().split('').reduce(function (r, a) { 
 
     r = r.map(function (b) { return b + '0'; }); 
 
     r.push(a); 
 
     return r; 
 
    }, []); 
 
} 
 

 
document.body.textContent = s(321);