2017-08-30 3 views
0

Ich habe Autocomplete wie folgt.Suchstruktur für Autovervollständigung

data[0] = {code:1,name:"jame"} 
data[1] = {code:2,name:"el"} 
data[2] = {code:3,name:"hey"} 
. 
. 


$('#txtKeywd').autocomplete({ 
    source: data.name, 
    autoFocus: true, 
    delay: 500, 
    minLength: 1 
}); 

ich so nach dem Namen suchen könnte, kann ich Namen wie jame, el ...

Allerdings bekommen, was ich code schließlich ist wollen.

Jetzt habe ich diesen Code gemacht.

Ich kann endgültige Antwort damit bekommen, aber es sieht ziemlich redundant und langsam aus.

Haben Sie gute Ideen ??

var txt = $(txtKeywd).val();  
for (i in data.name){ 

    if (data.name[i] === txt){ 
     console.log(data.code[i]); // i can get the code here!!! but it takes time.... 
    } 
} 

Antwort

0

Wenn Ihre Namen eindeutig sind, verwenden Sie einen Objekthash, die Suchzeit ist O (1).

Sie könnten strukturieren es mögen:

var lookup = 
{ 
    jame: 1, 
    hey: 3, 
    el: 2, 
    'a name with spaces': 87 
}; 

var code = lookup['jame']; // gives 1 

Beachten Sie, dass:

var code = lookup['jaem']; // gives undefined 

Beachten Sie auch, dass die Lookup-Tasten (die Namen) müssen gültige JavaScript-Variable Namenskonventionen folgen, sonst müssen Sie Platzieren Sie sie in Anführungszeichen, doppelt "" oder einzeln "", Ihre Wahl

Wenn Sie ein Array von Objekten für Ihre Autocomplete arbeiten müssen, müssen Sie möglicherweise beide verwenden, aber erzeugen den Nachschlag aus dem Array, wie:

var lookup = {}; 
data.forEach(function(index) 
{ 
    lookup[data[index].name] = data[index].code; 
}); 

ein paar Fragen,

  1. Wie groß ist Ihr Array von Daten?
  2. Haben Sie nur die Nachschlagezeit gemessen?
  3. Wenn Ihre Liste klein ist, machen Sie sonst noch etwas in Ihrem Code, das nicht in der Suchroutine sein sollte?
  4. Ist dies die von Ihnen verwendete jQuery UI-Autocomplete?

zu optimieren, was Sie haben eine for Schleife viel schneller als eine for in Schleife sein würde.

Auch ich vermute, dass Sie Autocomplete verwenden, so erhalten Sie n Ergebnisse für jedes Präfix der Benutzer eingegeben hat, in diesem Fall wird die Suche nicht funktionieren, daher ... je nach Ihrem Anwendungsfall und das gewünschte Ergebnis, Sie könnte besser bedient werden mit einer anderen Datenstruktur vollständig ... vielleicht ein trieHere is one that was prepared earlier. The author of JQuery has some ideas as well.

0

Sie den Ereignishandler verwenden können .change(): As the API says, die Funktion dieses Event-Handling wird das ausgewählte Element als zweiten Parameter erhalten:

... 
$('#txtKeywd').autocomplete({ 
    source: data.name, 
    autoFocus: true, 
    delay: 500, 
    minLength: 1 
}).change(function (event,item) { 
    console.log(item.code); 
}); 
Verwandte Themen