Reiter: Array durchsuchen

Hallo,

... eine Kniffel-Aufgabe !

Ich möchte per Javascript ein Array "daten" durchsuchen lassen, wobei das Suchwort jeweils der Wert eines Textfeldes ist.

//

var daten = new Array();

daten[0] = new Array("Ziel1.html","Haus Auto Boot");
daten[1] = new Array("Ziel2.html","Pferd");
daten[2] = new Array("Ziel3.html","Auto Apfel Hirn Haus");
daten[3] = new Array("Ziel4.html","Boot Pferd");

//

Ich habe zunächst einen Regulären Ausdruck definiert ...

reg = new RegExp(textfeld.value,"i");

... und lasse über eine for-Schleife und die Methode test() das jeweils zweite Element eines Datensatzes nach dem gesuchten Begriff durchsuchen. Bei Übereinstimmung wird der jeweils erste Element eines Datensatzes - hier eine URL - ausgegeben.

Kurz: zu jeder URL gibt es eine Reihe von Schlagworten, die das Zieldokument beschreiben; diese Aufstellung von Schlagworten soll durchsucht werden können.

Springender Punkt:

Enthält das Textfeld EIN Suchwort (z.B. "Auto") klappt die Suche auch wunderbar:
im Fall "Auto" heißt das: ausgegeben wird korrekt daten[0][0] und daten[2][0].

Enthält das Textfeld MEHRERE Suchwörter (z.B. "Haus Auto"), wird nur daten[0][0] ausgegeben, weil nur hier die beiden Suchwörter in genau der Reihenfolge auftauchen; daten[2][0] wird ignoriert, obwohl hier auch die zwei Suchwörter "Haus" und "Auto" vorkommen - nur in einer anderen Reihenfolge.

Logisch - aber unerwünscht ...

Gibt es eine Möglichkeit, das Array auch nach mehreren Begriffen gleichzeitig zu durchsuchen, ohne das die Reihenfolge der Suchbegriffe dabei eine Rolle spielt ?

Für Ansätze und Vorschläge besten Dank vorab

Mfg Reiter

    1. Das Problem ist aber nicht, ein Array zu durchsuchen ... ich denke, das Spezifische des Problems rechtfertigt eine Frage im Forum.

      Und zum Alles-Wisser Googgle: 8 von 10 Treffern wollen mir ein Array bei ebay verkaufen, die restlichen 2 Hinweise zu Arrays finde ich dann auf Porno-Seiten ... schönen Dank auch, Goggle!

      (Übertreibung veranschaulicht!)

      Mfg Reiter

  1. Hi

    Ich würde das so machen:

    1. Nur mit einem der möglichen Suchbegriffe suchen.
    2. Bei einem Match überprüfen, ob auch die weiteren Suchbegriffe matchen.
    3a. Wenn nein: Match verwerfen und weitersuchen
    3b. Wenn ja: Suchtreffer ausgeben o.ä.

    Damit muss das Array nur einmal durchlaufen werden.

    Bessere Vorschläge?
    Gruss,
    Mathias

  2. Gibt es eine Möglichkeit, das Array auch nach mehreren Begriffen gleichzeitig zu durchsuchen, ohne das die Reihenfolge der Suchbegriffe dabei eine Rolle spielt ?

    Ja, du suchst |

    reg = new RegExp('auto|boot',"i");

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Gibt es eine Möglichkeit, das Array auch nach mehreren Begriffen gleichzeitig zu durchsuchen, ohne das die Reihenfolge der Suchbegriffe dabei eine Rolle spielt ?

      Ja, du suchst |

      reg = new RegExp('auto|boot',"i");

      Struppi.

      Hy Struppi,

      das ist natürlich eine gute Idee - aber jetzt muß ich ja noch die Suchbegriffe (die ja nicht immer "auto" und "boot" heissen!) aus textfeld.value extrahieren und an die Stelle bringen, wo bei Dir auto|boot steht ... ?!

      Immer noch ratlos - wäre toll, wenn Du nochmal helfen kannst Mfg Reiter

      1. das ist natürlich eine gute Idee - aber jetzt muß ich ja noch die Suchbegriffe (die ja nicht immer "auto" und "boot" heissen!) aus textfeld.value extrahieren und an die Stelle bringen, wo bei Dir auto|boot steht ... ?!

        Immer noch ratlos - wäre toll, wenn Du nochmal helfen kannst Mfg Reiter

        z.b. so:
        var text = 'auto boot';
        var reg = new RegExp(text.split(' ').join('|'),"i");

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. z.b. so:
          var text = 'auto boot';
          var reg = new RegExp(text.split(' ').join('|'),"i");

          Dank Struppi!

          Wenn mich meine Kenntnisse nicht täuschen, steht der/die/das Pipe-Zeichen für eine ODER-Verknüpfung: es werden also Treffer angegeben, die ENTWEDER den Begriff 'auto' ODER den Begriff 'boot' enthalten.

          Üblicherweise bedeutet die Eingabe von mehreren Begriffen - durch Leerzeichen getrennt - jedoch eine UND- Verknüpfung .... oder?

          Auch in meinem Fall soll es eine UND-Verknüpfung sein:

          Suche und finde Einträge, in denen beide Begriffe vorkommen.
          Soweit ich weiß, gibt es aber kein RegExp für eine UND-Verknüpfung ...

          Oder bin ich jetzt ganz auf dem Holzweg ???

          Mfg Reiter