Christoph Zurnieden: Suchfunktion

Beitrag lesen

Hi,

sagt mal was zu dem ansatz. geht , geht gar nicht, weg damit...?

Von der grundsätzlichen Idee, aber wirklich nur ganz grundsätzlich ist es in Ordnung. Den Code kannst Du aber fast komplett entsorgen. Nur das Formular und das sortierte(?) Array ist benutzbar.

also das array soll meinen stichwortindex darstellen, die wörter sind jetzt nur beispielwörter.

Aber der Index ist sortiert? Wie groß wird denn der Index? Schon größer als nur einige zig Stück, oder?
Dann wäre eine einfach binäre Suche anzuraten (bevor jemand Palaver macht: das reicht, soviele _können_ das gar nicht werden, das sich etwas komplexeres lohnen würde. So große Dateien läd kaum ein Browser.):

function binarySearch( needle, haystack){
  var low    = 0;
  var high   = haystack.length - 1;
  var middle = 0;
  var round  = 0;
  while(low <= high){
    round++;
    middle = Math.floor((low + high)/2);
    if(needle < haystack[middle])
      high = middle - 1;
    else if (needle > haystack[middle])
      low = middle + 1;
    else
       return middle;
  }
  return -1;
}

Diese Funktion setzt aber voraus, das nicht nach lokal-lexikalischen Gesetzen sortiert wurde, sondern nach Buchstabenwerten und das alle Zeichensätze gleich sind.
Also z.B. _nicht_:
(latin-15)arm,ärmer,zulu
sondern:
(latin-15)arm,zulu,ärmer

Was hattest Du noch? Ach ja: wenn Du die Ausgabe in einpackst, z.B. in ein div o.ä., dann kannst Du die ganze Box löschen. Das geht z.b. auch gut in Verbindung mit "reset" vom Formular.

Beispiel:

Am Anfang einfach sowas da hinschreiben, wo es auftauchen soll:
[...]
<div id="ausgabe"></div>
[...]

Eine Ausgabe dort erzielst Du z.B. mit einer Funktion wie dieser:

function printLine(_Line){
  var line = _Line;
  var linebreak;
  var textnode;

linebreak = document.createElement("br");
  textnode  = document.createTextNode(line);

document.getElementById("ausgabe").appendChild(linebreak);
  document.getElementById("ausgabe").appendChild(textnode);
}

Löschen dann z.B. so:

function clearOutput(){
  var arnold = document.getElementById("ausgabe");
  var adam   = arnold.cloneNode(false);

arnold.parentNode.replaceChild(adam,arnold);
}

(99 Gummipunkte dem, der mir sagt warum ich ausgerechnet die Variablennamen "adam" und "arnold" gewählt habe ;-)

so short

Christoph Zurnieden