0

在我的可排序表中,我null通过一系列if/else语句将 s 排序到底部,将数字解析为整数,将字符串小写。

我试图让带有特殊字符的字符串在顶部排序。

  • 如果我给它一个数字值,它将进入数字循环并进行解析。

  • 如果我给它一个null值,它将进入null循环。

我该怎么办?

$('#column1').click(function(e) {

    String.prototype.trim = function()
    {
    return this.replace(/^\s+|\s+$/g,"");
    }

    String.prototype.ltrim = function() 
    {
    return this.replace(/^\s+/,"");
    }

    String.prototype.rtrim = function()
    {
    return this.replace(/\s+$/,"");
    }
    var specChar = /[a-zA-Z1-9]/;
    var $sort = this;
    var $table = $('#sort-table');
    var $rows = $('tbody > tr',$table); 

    if($($sort).attr('class')== 'asc'){

        $rows.sort(function(a, b){
        var keyA = (($('td:eq(0)',a).text()).toLowerCase()).trim();
        var keyB = (($('td:eq(0)',b).text()).toLowerCase()).trim();

            if(!isNaN(keyA) || !isNaN(keyB) )
            {               
                if(keyA.length <1 || keyB.length < 1)
                    {
                        if(keyA.length <1  && keyB.length >1)
                            {
                            keyA = "zzzzzzzzzzzzzzz";
                            }
                        else if(keyB.length <1  && keyA.length >1)
                        {
                            keyB = "zzzzzzzzzzzzzzz";
                        }

                        else
                        {
                            keyA="zzzzzzzzzzzzzzz";
                            keyB="zzzzzzzzzzzzzzz";
                        }
                    }
                else
                {
                    if(!isNaN(keyA) && isNaN(keyB))
                    {
                        keyA= parseInt(($('td:eq(0)',a).text()));
                    }

                    else if(!isNaN(keyB)&& isNaN(keyA))
                    {
                        keyB= parseInt(($('td:eq(0)',b).text()));
                    }

                    else
                    {
                        keyA= parseInt(($('td:eq(0)',a).text()));
                        keyB= parseInt(($('td:eq(0)',b).text()));
                    }

                }
            }
            else if ( specChar.test[keyA] == true || specChar.test[keyB] == true)
            {
                console.log("this worked " + keyA + " " + keyB)
                if(specChar.test[keyA] == true && specChar.test[keyB] == false)
                {
                    keyA = null;
                }
                else if(specChar.test[keyB] == false && specChar.test[keyA] == false)
                {
                    keyB = null;
                }
                else
                {
                    keyA = null;
                    keyB = null;
                }
            }
            else
            {
            }
            $($sort).attr('class', 'desc');
            return (keyA < keyB) ? 1 : -1;


        }); 

    $.each($rows, function(index, row){
    $table.append(row);
    $("tr:even").css("background-color", "#FF004D");
    $("tr:odd").css("background-color", "#FFDD00"); 

    }); 

    } 

    else {
            $rows.sort(function(a, b){
                var keyA = (($('td:eq(0)',a).text()).toLowerCase()).trim();
                var keyB = (($('td:eq(0)',b).text()).toLowerCase()).trim();
                if(!isNaN(keyA) || !isNaN(keyB) )
                {                   
                    if(keyA.length <1 || keyB.length < 1)
                        {
                            if(keyA.length <1  && keyB.length >1)
                                {
                                keyA= "zzzzzzzzzzzzzzz"
                                }
                            else if(keyB.length <1  && keyA.length >1)
                            {
                                keyB= "zzzzzzzzzzzzzzz"
                            }

                            else    
                            {
                                keyA= "zzzzzzzzzzzzzzz"
                                keyB= "zzzzzzzzzzzzzzz"
                            }
                        }
                    else
                    {
                        if(!isNaN(keyA) && isNaN(keyB))
                        {
                            keyA= parseInt(($('td:eq(0)',a).text()));
                        }

                        else if(!isNaN(keyB)&& isNaN(keyA))
                        {
                            keyB= parseInt(($('td:eq(0)',b).text()));
                        }

                        else
                        {
                            keyA= parseInt(($('td:eq(0)',a).text()));
                            keyB= parseInt(($('td:eq(0)',b).text()));
                        }

                    }
                }
            else if ( specChar.test(keyA) == false || specChar.test(keyB) == false)
            {
                console.log("this worked " + keyA + " " + keyB)
                if(specChar.test(keyA) == false)
                {
                    keyA = " ";
                }
                else if(specChar.test(keyB) == false)
                {
                    keyB = " ";
                }
                else
                {
                    keyA = " ";
                    keyB = " ";
                }
            }
                else{}

            $($sort).attr('class', 'asc');
            return (keyA > keyB) ? 1 : -1;
            });     
            $.each($rows, function(index, row){
            $table.append(row);
            $("tr:even").css("background-color", "#FF004D");
            $("tr:odd").css("background-color", "#FFDD00"); 
            });
        }

        e.preventDefault();

    });
4

1 回答 1

1

我创建了一个对数组进行排序的小提琴。

JavaScript

var array = ["a", "!", "2", "", "b", "1", null, "C"],
    sortedArray;

sortedArray = array.sort(function(a, b) {
    if (a === "") return 1;
    if (b === "") return -1;
    if (a === null) return 1;

    if (typeof a === 'string') {
        a = a.toLowerCase();
    }
    if (typeof b == 'string') {
        b = b.toLowerCase();
    }

    return b < a ? 1 : -1;
});

console.log(sortedArray); // => ["!", "1", "2", "a", "b", "C", null, ""]​

您可能可以根据自己的口味进一步调整它。

于 2012-08-20T16:38:25.637 回答