简体   繁体   English

按字符对JavaScript字符中的字符串进行排序

[英]Sorting strings in javascript character by character

I am trying to sort a list of strings when a character is entered. 输入字符时,我试图对字符串列表进行排序。 Suppose I have strings like "Dog", "Ball", "Rabbit", "Pizza" etc. and when "d" is entered by user first "Dog" should come then "Ball", then "Pizza" and finally "Rabbit" should display. 假设我有“ Dog”,“ Ball”,“ Rabbit”,“ Pizza”等字符串,并且当用户首先输入“ d”时,“ Dog”应该出现,然后是“ Ball”,然后是“ Pizza”,最后是“ Rabbit” ”应显示。

How to achieve this functionality. 如何实现此功能。 Any clues please. 请提供任何线索。

I think you can use this code. 我认为您可以使用此代码。 Its not optimized but you can get the idea 它没有优化,但您可以理解

    <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()" />
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; 
})

returns ["Dog", "Ball", "Foo", "Pizza"] 返回[“ Dog”,“ Ball”,“ Foo”,“ Pizza”]

Generate a sort function depending on the current input. 根据当前输入生成排序函数。
If the current input matches one item in sort, default it first. 如果当前输入与某项匹配,则默认为默认。 If it matches both or none do a normal string compare. 如果两者都匹配,则不进行常规字符串比较。

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"]

Above code uses input as 'd' , modify as required. 上面的代码使用输入作为'd' ,根据需要进行修改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM