Tach!
Ich finde, die Prüfung auf Existenz mittels indexOf wie in deinem Beispiel ist nicht wirklich gut lesbar.
Es ist nicht semantisch. Aber was willste machen, wenn kein semantisches Konstrukt (ausreichend verbreitet) verfügbar ist? Die Nicht-Semantik in einer String-Erweiterung verstecken, die dann einen die Bedeutung besser rüberbringenden Namen hat? Für einen einzelnen Funktionsaufruf? (Die richtige Antwort auf diese rhetorische Frage ist includes und Polyfill.)
Wenn wir diesen Aspekt jedoch ignorieren, dann kann man das unter Verwendung des bitweisen NOT-Operators auch etwas kürzer schreiben:
var filteredRecords = records.filter(function (record) { return ~record.name.indexOf(searchTerm); });
Das finde ich noch weniger lesbar. Es nähert sich durch die Bit-Operation statt einer logischen, dessen Ergebnis dann implizit wieder in Logik umgewandelt wird, auch nicht weiter dem semantischen Ziel an. Stattdessen muss man nun auch noch die Zahlendarstellung im Zweierkomplement kennen, um zu wissen, dass bei -1 alle Bits gesetzt sind. Ich musste das eben grad erstmal nachschlagen, um das Arbeitsprinzip zu verstehen. Dass ~
eine bitweise Negation ist, hast du ja schon vorab "verraten". Wer arbeitet denn bei Javascript mit Bits?
Tatsächlich gibt es aber mittlerweile eine Methode deren eigentlicher Zweck es ist zu prüfen, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist, nämlich String.prototype.includes:
const filteredRecords = records.filter(record => record.name.includes(searchTerm));
Das ist deutlich besser lesbar, denke ich.
Jetzt ja. Damit ist dann auch das Anwendungsbeispiel obsolet geworden.
In der eigentlichen Frage sind wir damit nicht weitergekommen. Mir fallen aber nur Fälle ein, bei denen man damit Probleme lösen kann, die man sich selbst durch Nichtnormalisierung von Daten selbst eingebrockt hat.
Die Methode includes wird allerdings noch nicht von allen relevanten Browsern unterstützt, weshalb vorerst ein Polyfill bereitgestellt werden sollte. Ein solches ist jedoch schnell geschrieben und noch schneller kopiert und eingefügt.
Jein. Man müsste noch den zweiten Parameter berücksichtigen. Und dann kopiere ich mir lieber das Polyfill aus dem MDN statt meine Zeit mit der Zweiterfindung des Rades zu verbringen.
dedlfix.