2016-07-28 7 views
0

Ich habe Base-10-Nummer 1000, ich möchte es in eine Base-24-Nummer konvertieren.Wie benutze `reduce`, um eine Base-10-Nummer in eine Base-24-Nummer umzuwandeln?

1000 = 1x24x24 + 17x24 + 16 

So ist die Basis-24-Zahl ist [1, 17, 16] wenn ich es als eine Anordnung dar, und jedes Element verwendet immer noch eine Base-10-Nummer.

Ich denke, es ist nicht schwer for zu verwenden, um es zu implementieren:

let x = 1000; 
let base24 = []; 

for(let i=1;;i++) { 
    let y = x % Math.pow(24,i); 
    base24.unshift(y/Math.pow(24,i-1)); 
    x = x - y; 
    if(x===0) { 
    break; 
    } 
} 

console.log(base24); 

// output: [1, 17, 16] 

Aber ist es möglich, es zu tun, ohne ein for oder while zu verwenden? Verwenden Sie zum Beispiel eine reduce Methode (von ES6)?

+6

' (1000) .toString (24) .split ("") Karte (x =>. parseInt (x, 24)) ' – JJJ

+0

@ PM77-1 das funktioniert umgekehrt von dem, was gefragt wurde. –

+0

Die ESNexty-Version 'function * numIterator (Wert = 0, Basis = 10) { \t if (Wert) { const digit = Wert% Basis; Fließziffer; yield * numIterator ((Wert-Ziffer)/Basis, Basis); } } '[Demo] (https://jsfiddle.net/394ku240/) –

Antwort

-1

Rework von Juhanna ‚s Kommentar, in ES5:

var toBase24 = function(n) { 
    return n.toString(24).split("").map(function(x) { return parseInt(x, 24); }); 
}; 

Verbrauch:

var a = 1000; 

var b = toBase24(a); // [1, 17, 16] 
+3

Bitte ändern Sie nicht das Verhalten von JS nativen Objekten - wie zum Beispiel 'Number.prototype' – Iso

+0

Sorry; Solange JS eine Prototyp-basierte Vererbungssprache bleibt und die intrinsischen Objekte die Prototyp-Eigenschaft offen legen, können und werden die Menschen. Im Allgemeinen sollte es für diejenigen in Ordnung sein, die wissen, was sie tun ... – thor2k

+0

Sicher, aber das macht es nicht relevant in dieser Antwort und wird allgemein als schlechte Übung betrachtet, besonders für Anfänger, von denen SO voll ist . – Iso