Wie trenne ich eine ganze Zahl in einem Array in JavaScript in einzelne Ziffern?
Lesezeit: 3 Minuten
magnusbl
Das ist mein Code bisher:
var n = 123456789;
var d = n.toString().length;
var digits = [];
var squaredDigits = [];
for (i = d; i >= 1; i--) {
var j = k / 10;
var r = (n % k / j) - 0.5;
var k = Math.pow(10, i);
var result = r.toFixed();
digits.push(result);
}
console.log(digits);
Aber wenn ich meinen Code ausführe, bekomme ich das: [9, 1, 2, 3, 4, 5, 6, 7, 8]
Wenn jemand das Problem sieht oder eine bessere Lösung findet, wäre ich sehr dankbar!
Warum nicht einfach so?
var n = 123456789;
var digits = (""+n).split("");
Nur eine Anmerkung, dies ergibt ein Array von Zeichenfolgen … keine Zahlen.
– rgdrei
28. März 2012 um 19:24 Uhr
Guter Punkt. Aber so wie es aussieht, wird die Ziffer dann mit sich selbst multipliziert, was meiner Meinung nach gut funktioniert. Alles, was getan werden muss, ist vorsichtig zu sein und wahrscheinlich zu verwenden parseInt(...,10); zu passenden Zeiten.
– Niet the Dark Absol
28. März 2012 um 19:28 Uhr
Das Problem ist, dass ich die Ziffern danach quadrieren möchte, und ich glaube, ich kann das nicht mit einer Zeichenfolge tun?
– magnusbl
29. März 2012 um 7:37 Uhr
for (var i = 0; i < digits.length; i++) { digits[i] = +digits[i]; } wandelt auch jeden Wert in eine ganze Zahl um
– Martin
1. Mai 2014 um 15:50 Uhr
(“”+num1).split(”).map(Number), um ein Array von Zahlen anstelle einer Zeichenfolge zurückzugeben.
Schöne Lösung, klar und leicht verständlich und nutzt ES6-Funktionen. Auch eine der empfohlenen Funktionen hier
– tw_hoff
2. Juni 2017 um 5:39 Uhr
.map(Number) ist sehr nett!
– Einsam
28. Dezember 2017 um 21:40 Uhr
Mit Abstand die beste Antwort
– Luiz Henrique Guerra
3. August 2019 um 1:27 Uhr
Ich liebe diese Lösung – sie zwingt mich dazu, etwas über globale Objekte und ihre Funktionalität zu entdecken
– rpivovar
6. September 2019 um 4:29 Uhr
Kann jemand erklären, warum .map(Number) so funktioniert, wie es funktioniert?
– 4cody
11. Oktober 2020 um 14:34 Uhr
Schinken
(123456789).toString(10).split("")
^^ Dies gibt ein Array von Strings zurück
(123456789).toString(10).split("").map(function
^^ Dies gibt ein Array von Ints zurück
Dies ergibt auch ein Array von Strings … keine Zahlen
– rgdrei
28. März 2012 um 19:25 Uhr
Nett! Beachten Sie nur, dass .map in IE 8 oder darunter nicht verfügbar ist.
– rgdrei
28. März 2012 um 19:31 Uhr
Man würde erwarten map(parseInt) arbeiten aber Array.map ruft die Funktion auch mit dem Index und dem Array selbst auf (war das wirklich nötig?), damit es nicht funktioniert.
– Tokland
17. Dezember 2012 um 17:03 Uhr
In acht nehmen! Es ist bekannt Falle. Noch ein anderer do-not-read-documentation-but-yell-at-stupid-javascript Fall.
– Bogdan Slovyagin
29. Oktober 2016 um 11:06 Uhr
Mir ist klar, dass dies vor einigen Monaten gefragt wurde, aber ich habe eine Ergänzung zu Samccones Antwort, die prägnanter ist, aber ich habe nicht den Vertreter, den ich als Kommentar hinzufügen könnte!
Anstatt von:
(123456789).toString(10).split("").map(function
In Betracht ziehen:
(123456789).toString(10).split("").map(Number)
Alexander
Habe die obige Antwort ein wenig geändert. Wir müssen die ‘map’-Methode nicht wirklich explizit aufrufen, da sie bereits als zweites Argument in ‘Array.from’ eingebaut ist. Ab MDN.
Array.from(arrayLike[, mapFn[, thisArg]])
let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]
Ich mag es, obwohl es wahrscheinlich angemessen ist, es zu verwenden const wann immer Sie eine Variable nicht neu zuweisen werden