JS .indexOf oder .search - loop ins Array

D0bby

Cadet 4th Year
Registriert
Aug. 2023
Beiträge
68
huhu

Ich hab gerade Methoden für Strings im Kurs und dort wird erklärt, wie man sachen suchen kann etc.

Nur gibt indexOf und search nur das erste Ergebnis aus. Also hab ich mir einen kurzen loop gebastelt.
Ich hab nur das Gefühl das es leichter / besser gehen würde.

Habt ihr Tipps oder Tricks? :)
Am Ende .pop ich die -1 raus - das finde ich am "unschönsten" - mir fällt da aber auf die schnelle auch nichts anderes ein.


Javascript:
let s = " Lorem ipsum dolor sit amet ipsum. ";


let position = console.log(s.indexOf("ipsum"));

let count = 0;
let result = [];



while (position !== -1) {
    count++;
    position = s.indexOf("ipsum", position + 1);
    result.push(position);
    
} result.pop();

console.log(result);
 
Mit matchAll kann man das einfacher machen, nutzt dann jedoch RegExp und dürfte somit ggf. weniger performant sein (was in den meisten konkreten Fällen egal sein dürfte, da immernoch verdammt schnell):
Javascript:
const matches = [..." Lorem ipsum dolor sit amet ipsum. ".matchAll(/ipsum/g)]

matches ist dann ein Array von Objekten, die u.A. den Index beinhalten.

Wenn du direkt nur die Indizes willst:
Javascript:
const indices = [..." Lorem ipsum dolor sit amet ipsum. ".matchAll(/ipsum/g)].map((match) => match.index);
 
  • Gefällt mir
Reaktionen: kim88 und D0bby
Allgemein ist idiomatischer Code vorzuziehen und insbesondere Schleifen durch einschlägige Funktionen zu ersetzen. Rein akademisch fände ich das interessant, was wann schneller ist. Selbstgebaute Schleifen sind häufig deutlich langsamer, andererseits kompiliert V8 ja den Code und könnte daher ggf. Optimierungen verwenden. Der hier verwendete reguläre Ausdruck ist andererseits aber sehr simpel und die regex engine sollte das sehr performant hinkriegen.
 
  • Gefällt mir
Reaktionen: D0bby
Ich danke euch :daumen:

Gleich noch einen neuen Operator kennen gelernt "...".
Wenn ich das richtig verstehe, setzt er durch die ... die Ergebnisse in ein Array.
 
... ist Spread-Syntax. Das macht... ach, lies einfach bei MDN. Die erklären das dort gut.
 

Ähnliche Themen

Zurück
Oben