Guten Abend allerseits,
heute mal eine Frage an die wahren Insider - folgende Aufgabenstellung:
Grundsätzlich geht es erstmal um eine Autocomplete-Version. Soll wie immer kurz und kanckig sein. Habe im netz auch was nettes gefunden:
function binSuche(elem)
{
var links = -1;
var rechts = this.length;
var mitte;
while(rechts - links > 1)
{
mitte = (links + rechts) >>> 1;
if(this[mitte] < elem)
links = mitte;
else
rechts = mitte;
}
if(this[rechts] != elem)
return -(rechts + 1);
return rechts;
}
alert([["a"],["b"],["d"]].binSuche("c")); // Testausgabe
Tolle Sache! Gibt bei nicht vorhandenem Element die Stelle an der es eingefügt werden muss als negative Zahl an, wobei bei 1 angefangen wird zu zählen. Ist das Element dagegen in der Menge vorhanden, dann wird bei Null angefangen zu zählen und die positive Zahl gibt die entsprechende Stelle im Feld an. (Nur der vollständigkeithalber: das Feld muss bereits vollständig vorsortiert sein, denn es geht hier nur um das Einsortieren...) Soweit sogut, funktioniert super, und ich vermute ohne das ich es getestet habe, dass es auch relativ schnell geht, da Bit-Operatoren benutzt werden. Jetzt kommen wir zu meinem Problem: Ich habe im Prinzip keine Ahnung wie und warum die Prozedur funktioniert was mich in diesem Fall auch nur deshalb stört da meine Anforderungen etwas abweichen, ich aber das Ding nicht anpassen kann. Wie gesagt keine Ahnung welche Einsen und Nullen sich da wo, wie und warum verschieben. Bin ja selber eine Null...
Ich habe ein zweidimensionales Feld. Es gibt immer Paare von ID's und dazugehörigen Bezeichnern, also z.B.: [[0,"a"],[1,"b"],...]
Also nichts ungewöhnliches aber eben anders als hier ursprünglich vorgesehen. Sortiert werden soll übrigens nach dem Bezeichner (wie gesagt: autocomplete), aber ich brauch eben auch die Nummer.
Jetzt bin ich gespannt wer von euch sich als echter Spezi outet und mir das Ding hinbiegt. Tausend Dank schonmal vorab!!!
Jense