Innanzi tutto grazie della risposta.
Purtroppo non ho guardato come si deve il tuo scritto (in fondo oggi è Festa
) e me lo studierò domani mattina.
Comunque, il nocciolo della questione è che uso questa routine
codice:
/*----------------------------------------------------------------
Trova il primo elemento della lista ordinata a il cui elemento
inizia per x: restituisce -1 se non trova corrispondenza
----------------------------------------------------------------*/
function FindLeft(a, x)
{
var l = 0;
var r = a.length;
var w = 0; y = "", y1 = "", k = 0, k1 = 0;
if(x == "") return -1;
x = x.toLowerCase( )
while(l <= r)
{
k = Math.floor((l + r) / 2) ;
y = a[k].substr(0, x.length).toLowerCase();
if(x <= y) r = k - 1;
if(x >= y) l = k + 1;
if(x == y) w = 1;
}
if(w != 0)
{
k1 = k;
while (true)
{
k--;
if(k < 0) break;
y = a[k].substr(0, x.length).toLowerCase();
y1 = a[k1].substr(0, x.length).toLowerCase();
if(y != y1) break; else k1 = k;
}
return k1;
}
else
return -1;
}
Il vettore ordinato è creato nel server e la ricerca è indipendente da maiuscolo-minuscolo. Anche so l'ho trasformata (non senza fatica) da Basic a js, credo che sia corretta. Naturalmente il vettore deve essere ordinato, altrimenti è chiaro che non funziona.
Ora, è chiaro che bisogna prima studiare la tua risposta e poi, semmai, continuare il discorso :master: Ciao