@ -4,10 +4,14 @@
function distsort ( _a , _b )
{
var a = _a . substring ( 0 , _a . indexOf ( '::' ) ) ;
var b = _b . substring ( 0 , _b . indexOf ( '::' ) ) ;
var a = _a . split ( '::' ) ;
var b = _b . split ( '::' ) ;
var cmp = a [ 0 ] - b [ 0 ] ;
return a - b ;
if ( cmp == 0 )
return ( a [ 2 ] == b [ 2 ] ) ? 0 : ( a [ 2 ] < b [ 2 ] ) ? - 1 : 1 ;
return cmp ;
}
function fittingStrings ( search , strings , cs )
@ -36,8 +40,37 @@ function fittingStrings (search, strings, cs)
_str = strings [ str ] ;
var dist = levenshtein ( _search , _str ) ;
// --- neue version ---------------------------------
// in dieser version wird die Ähnlichkeit nur bis
// zu der Länge des kürzesten Strings geprüft, daher
// werden Ähnlichkeiten im hinteren Stringbereich
// nicht berücksichtigt. Hat zur folge das man wenn
// man z.B. nur 's' mit anderen Strings vergleicht
// als erste die Strings aufgelistet bekommt die mit s
// anfangen, die andere Version listet die, in denen
// ein s vorkommt.
var minLen = ( _str . length < _search . length ) ?
_str . length : _search . length ;
var subDist = levenshtein (
_search . substr ( 0 , minLen ) , _str . substr ( 0 , minLen ) ) ;
// --------------------------------------------------
// --- alte version ---------------------------------
// in dieser Version kommen die ähnlicheren Strings
// weiter nach oben, allerding wird die Position der
// Ähnlichkeit nicht berücksichtigt...
// Wenn die neue Version -1 gebracht hat schau ob
// überhaupt eine Ähnlichkeit drinsteckt, gib der
// aber ein penalty von minLen mit damit die nicht
// über den Einträgen steht die in der neuen Version
// ermittelt wurden.
if ( subDist == minLen )
{
var delta = _str . length - _search . length ;
var subDist = ( delta > 0 ) ? dist - delta : dist ;
subDist += ( delta > 0 ) ? dist - delta : dist ;
}
// --------------------------------------------------
dists . push ( subDist + '::' + dist + '::' + strings [ str ] ) ;
}