JavaScript var aufteilen?
Ich habe var: "var board = 41--75-----53--7--2-36-81--7-9--25-1-3--9-47--2-1-7---6587--9-----26-8--1925---47" und möchte das diese aufgeteilt wird sodass sie so aussieht:
var boardAufgeteilt = [
"41--75---",
"--53--7--",
"2-36-81--",
"7-9--25-1",
"-3--9-47-",
"-2-1-7---",
"6587--9--",
"---26-8--",
"1925---47"
]
Also, dass man die 81 Zeichen automatisch auf neun, neun lange Zahlenblöcke aufteilt.
Ich hoffe das dies möglich ist um mir jemand helfen kann.
3 Antworten
Du möchtest einen langen String in JavaScript in ein Array aufteilen, wobei jedes Element genau 9 Zeichen lang ist. Das geht ganz einfach mit einer Schleife. Hier ist der Code dazu:
var board = "41--75-----53--7--2-36-81--7-9--25-1-3--9-47--2-1-7---6587--9-----26-8--1925---47";
var boardAufgeteilt = [];
for (var i = 0; i < board.length; i += 9) {
boardAufgeteilt.push(board.substring(i, i + 9));
}
console.log(boardAufgeteilt);
So funktioniert es:
- Wir haben einen langen String board.
- Mit einer Schleife durchlaufen wir diesen String in Schritten von 9 Zeichen.
- In jedem Schritt nehmen wir 9 Zeichen und fügen sie dem Array boardAufgeteilt hinzu.
- Am Ende haben wir ein Array, in dem jedes Element ein 9 Zeichen langer Teil des ursprünglichen Strings ist.
Das Ergebnis sieht dann so aus:
[
"41--75---",
"--53--7--",
"2-36-81--",
"7-9--25-1",
"-3--9-47-",
"-2-1-7---",
"6587--9--",
"---26-8--",
"1925---47"
]
Hallo.
Ewig nichts mit Javascript gemacht, Syntax könnte also falsch sein, aber so ca.
Für die einfache Ausgabe:
for (let i = 0; i < board.length; i += 9) {
console.log(board.substring(i, i + 9));
}
Wenn sie stattdessen als einzelne Blöcke abgespeichert werden sollen:
let substrings = [];
for (let i = 0; i < board.length; i += 9) {
substrings.push(board.substring(i, i + 9));
}
Das ist jetzt aber statisch auf 9 Zeichen pro Block aufgeteilt.
LG
Overall kann man natürlich auf die Art Start + Länge, statt Start + Ende nutzen. Aber dürfte sich in der Performance kaum messbar bemerkbar machen.
Ich vermute sogar, dass es den gleichen Algorithmus nutzt, den Endpunkt nur dann selbst in der Funktion berechnet. Also Jacke wie Hose. 😉
substr ist übrigens veraltet, siehe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
Was weiß ich, was er mit den Blöcken dann vorhat. Sein Informationsgehalt in der Frage war sehr dürftig. 😉
const boardAufgeteilt = board.match(/.{9}/g);
Die RegEx-lösung hätte ich rein intuitiv auch bevorzugt. (Weils elegant wirkt)
...aaaaber... , für kurze Strings ist die Performance grottenschlecht.
let board = "41--75-----53--7--2-36-81--7-9--25-1-3--9-47--2-1-7---6587--9-----26-8--1925---47"
let chunks=[]
console.time("perfSubstrLoop")
for (let i = 0; i < board.length; i += 9) {
chunks.push(board.substr(i,9));
}
console.timeEnd("perfSubstrLoop")
console.time("perfRegexSplit")
chunks = board.match(/.{9}/g)
console.timeEnd("perfRegexSplit")
//perfSubstrLoop: 0.02392578125 ms
//perfRegexSplit: 0.302001953125 ms
Bei der RegEx-Methode hat man eben den ganzen Overhead für die Initialisierung des RegEx-Objects (den wegen der impliziten Verwendung nicht sieht
....klar es sind nur Bruchteile von Millisekunden, aber je nachdem was man vor hat und wie oft die jeweilige Operation anfällt, sollte man schon überlegen was man nutzt.
Die RegEx-Engine von JS scheint ja mal sauber zu funktionieren. Ich bin erstaunt :)
Schöne Lösung mit regex! 👍 Aber für Anfänger wahrscheinlich nicht so richtig nachzuvollziehen.
Danke! :D
Ja stimmt, eine Erklärung könnte ich noch ergänzen. Mach ich wenn der Fragesteller danach fragt :P
(Bitte in der heutigen Zeit kein var mehr verwenden. Das macht einige Probleme. Stattdessen verwendet man let und const).
..und warum explizit das Ende jedes Chunks explizit berechnen?
substr() benötigt jeweils nur die Startposition und die länge des gewünschten Teilstrings