Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将此表从最大数字排序到最小数字?_Javascript_Jquery_Sorting - Fatal编程技术网

Javascript 如何将此表从最大数字排序到最小数字?

Javascript 如何将此表从最大数字排序到最小数字?,javascript,jquery,sorting,Javascript,Jquery,Sorting,尝试按“rankscore”td从最大数到最小数对下表进行排序 <html> <head> <script src="js/jquery-1.12.3.min.js"></script> </head> <body> <h4>Current Rank</h4> <table id="rank"> <tbody> &

尝试按“rankscore”td从最大数到最小数对下表进行排序

<html>
    <head>
        <script src="js/jquery-1.12.3.min.js"></script>
    </head>
    <body>
<h4>Current Rank</h4>
<table id="rank">
    <tbody>
        <tr>
            <td class="namecell">Joe:</td>
            <td class="rankscore">7</td>
        </tr>
        <tr>
            <td class="namecell">Jim:</td>
            <td class="rankscore">13</td>
        </tr>
        <tr>
            <td class="namecell">Megan:</td>
            <td class="rankscore">936</td>
        </tr>
        <tr>
            <td class="namecell">Greg:</td>
            <td class="rankscore">13</td>
        </tr>
        <tr>
            <td class="namecell">Will:</td>
            <td class="rankscore">20</td>
        </tr>
        <tr>
            <td class="namecell">Paul:</td>
            <td class="rankscore">15</td>
        </tr>
        <tr>
            <td class="namecell">Tammy:</td>
            <td class="rankscore">133</td>
        </tr>
        <tr>
            <td class="namecell">Chari:</td>
            <td class="rankscore">123</td>
        </tr>
        <tr>
            <td class="namecell">Ed:</td>
            <td class="rankscore">6</td>
        </tr>
        <tr>
            <td class="namecell">Hank:</td>
            <td class="rankscore">13</td>
        </tr>
        <tr>
            <td class="namecell">Bill:</td>
            <td class="rankscore">13</td>
        </tr>
        <tr>
            <td class="namecell">Al:</td>
            <td class="rankscore">21</td>
        </tr>
        <tr>
            <td class="namecell">Stacy:</td>
            <td class="rankscore">13</td>
        </tr>
        <tr>
            <td class="namecell">Mack:</td>
            <td class="rankscore">13</td>
        </tr>
        <tr>
            <td class="namecell">Ira:</td>
            <td class="rankscore">13</td>
        </tr>
        <tr></tr>
    </tbody>
</table>
</body>

<script>
function sortTable(table, order) {
    var asc   = order === 'asc',
        tbody = table.find('tbody');

    tbody.find('tr').sort(function(a, b) {
        if (asc) {
            return $('td.rankscore', a).text().localeCompare($('td.rankscore', b).text());
        } else {
            return $('td.rankscore', b).text().localeCompare($('td.rankscore', a).text());
        }
    }).appendTo(tbody);
}

sortTable($('#rank'), 'desc');
</script>

</html>
该函数在排序时似乎只是查看第一个数字,而不是将所有数字都考虑在内


我没有写这个排序函数,我很难弄清楚它到底在做什么。我查阅了一页解释localCompare的内容,但并没有多大帮助

您得到的分数是按字符串顺序排序的,而不是按数字顺序排序的。您需要将文本转换为数字,然后与
bNum进行比较-1 : 1);
}

我还没有测试过这个,我可能有前后颠倒的<和>,但这是基本的想法。

Hm…没有让它工作。我用你的代码得到了各种奇怪的结果。
Megan:  936
Joe:    7
Ed:     6
Al:     21
Will:   20
Paul:   15
Tammy:  133
Hank:   13
Jim:    13
Greg:   13
Bill:   13
Ira:    13
Stacy:  13
Mack:   13
Chari:  123
    const aNum = parseInt($('td.rankscore', a).text());
    const bNum = parseInt($('td.rankscore', a).text());

    if (asc) {
        return (aNum === bNum ? 0 : (aNum < bNum ? -1 : 1);
    } else {
        return (aNum === bNum ? 0 : (aNum > bNum ? -1 : 1);
    }