JavaScript var aufteilen?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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:

  1. Wir haben einen langen String board.
  2. Mit einer Schleife durchlaufen wir diesen String in Schritten von 9 Zeichen.
  3. In jedem Schritt nehmen wir 9 Zeichen und fügen sie dem Array boardAufgeteilt hinzu.
  4. 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"
]


Woher ich das weiß:Studium / Ausbildung

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

Woher ich das weiß:Studium / Ausbildung – Diplom Wirtschaftsinformatiker

Erzesel  27.07.2024, 15:09

..und warum explizit das Ende jedes Chunks explizit berechnen?

substr() benötigt jeweils nur die Startposition und die länge des gewünschten Teilstrings

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" ;
const chunkSize = 9
let chunks=[]
for (let i = 0; i < board.length; i += chunkSize) {
    chunks.push(board.substr(i,chunkSize));
}
console.log(board)
console.log(chunks)
3
GuteAntwort2021  27.07.2024, 18:44
@Erzesel

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. 😉

1
MrAmazing2  27.07.2024, 14:41

const substrings*

Du veränderst es ja nicht

1
GuteAntwort2021  27.07.2024, 14:58
@MrAmazing2

Was weiß ich, was er mit den Blöcken dann vorhat. Sein Informationsgehalt in der Frage war sehr dürftig. 😉

2
const boardAufgeteilt = board.match(/.{9}/g);

Erzesel  27.07.2024, 15:42

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.

1
Erzesel  27.07.2024, 16:13
@Erzesel

PS kurze Strings sind ein sehr relativer Begriff...

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".repeat(1000000)
//...usw...

//perfSubstrLoop: 953.126220703125 ms
//perfRegexSplit: 1122.876953125 ms
1
cleanercode  27.07.2024, 18:38
@Erzesel

Die RegEx-Engine von JS scheint ja mal sauber zu funktionieren. Ich bin erstaunt :)

1
GuteAntwort2021  27.07.2024, 14:59

Schöne Lösung mit regex! 👍 Aber für Anfänger wahrscheinlich nicht so richtig nachzuvollziehen.

1
MrAmazing2  27.07.2024, 15:02
@GuteAntwort2021

Danke! :D

Ja stimmt, eine Erklärung könnte ich noch ergänzen. Mach ich wenn der Fragesteller danach fragt :P

1
MrAmazing2  27.07.2024, 14:37

(Bitte in der heutigen Zeit kein var mehr verwenden. Das macht einige Probleme. Stattdessen verwendet man let und const).

0