1

我正在尝试在输入字符时对字符串列表进行排序。假设我有“Dog”、“Ball”、“Rabbit”、“Pizza”等字符串,当用户首先输入“d”时,“Dog”应该出现,然后是“Ball”,然后是“Pizza”,最后是“Rabbit” “应该显示。

如何实现这个功能。请提供任何线索。

4

3 回答 3

0
var reg = /^d/i;  //reg exp to check array item first char
['Pizza', 'Dog', 'Ball', 'Foo'].sort(
function(a, b) { 
    if (reg.test(a)) {
        if (reg.test(b)) 
            return a > b; 
        return -1;
    } 
    if (reg.test(b)) { 
        if (reg.test(a)) 
            return a > b;
        return 1; 
    } 
    return a > b; 
})

返回 ["Dog", "Ball", "Foo", "Pizza"]

于 2012-11-08T05:57:28.057 回答
0

根据当前输入生成排序函数。
如果当前输入与排序中的一项匹配,则首先默认它。如果两者都匹配或都不匹配,则进行正常的字符串比较。

function generateSortFunction(str){
    var s = str.toLowerCase(), sl = s.length; // save re-computation
    return function sort(a,b){
        var am = +( a.length >= sl && a.slice(0, sl).toLowerCase() === s ),
            bm = +( b.length >= sl && b.slice(0, sl).toLowerCase() === s );
        if( am ^ bm ) return bm - am; // XOR then -1 if a first, 1 if b first.
        return a.localeCompare(b); // else sort normally
    };
}

// Using it
["Dog", "Ball", "Rabbit", "Pizza"].sort( generateSortFunction('d') );
// results in ["Dog", "Ball", "Pizza", "Rabbit"]

上面的代码使用输入 as 'd',根据需要进行修改。

于 2012-11-08T05:57:52.423 回答
0

我认为您可以使用此代码。它没有优化,但你可以明白

    <script type="text/javascript">
function fnc()
{
    var arr=new Array;
    var arr1=new Array;
    arr[0]="dog";
    arr[1]="pizza";
    arr[2]="doll";
    for(i=0;i<arr.length;++i)
    {arr1[i]=arr[i].length;}

    arr1=arr1.sort();
    alert(arr1);
}
</script>
<input type="button" onclick="fnc()" />
于 2012-11-08T05:48:28.837 回答