【问题标题】:Sorting an array of Javascript objects by string按字符串对 Javascript 对象数组进行排序
【发布时间】:2014-07-10 08:28:58
【问题描述】:

我的问题与找到的here 类似,但我只想按字符串排序。 假设我有以下 HTML。

<tbody>
        <tr class="finance" data-order="1">
            <td>John Smith</td>
            <td>Finance</td>
        </tr>
        <tr class="marketing" data-order="2">
            <td>Jane Doe</td>
            <td>Marketing</td>
        </tr>
        <tr class="maintenance" data-order="3">
            <td>Gary Ryan</td>
            <td>Maintenance</td>
        </tr>
        <tr class="dataEntry" data-order="4">
            <td>Damon Watts</td>
            <td>Data Entry</td>
        </tr>
        <tr class="dataEntry" data-order="5">
            <td>Ben Young</td>
            <td>Data Entry</td>
        </tr>
        <tr class="maintenance" data-order="6">
            <td>Calvin Lewis</td>
            <td>Maintenance</td>
        </tr>
    </tbody>

如何按第二个 td 升序或降序排序?现在我有这样的东西:

//Ascending Order
var tableRows = new Array();
    $("tbody tr").each(function(){
        tableRows.push(this);
    });
    console.log(tableRows);
    tableRows.sort(function(a, b){
        return( //not sure what to do here)
    }

【问题讨论】:

  • 这取决于您是否需要区域感知比较。
  • 我认为这行不通:tableRows.push(this); 因为this 绑定到全局对象。
  • @iaacp,我的意思是这取决于简单比较是否足够,或者您是否必须使用localeCompare()
  • @linstantnoodles,不在回调中传递给each(),没有。
  • 这更像是一个回避,但在 JavaScript 中将数组声明为 [] 比使用 new Array() 更有效

标签: javascript jquery arrays sorting html-table


【解决方案1】:

只是对它们进行排序?

$("tbody tr").sort(function(a, b) {
    var a_txt = $(a).find('td').eq(1).text(),
        b_txt = $(b).find('td').eq(1).text();

    return a_txt.localeCompare(b_txt);
}).appendTo('tbody');

FIDDLE

要切换顺序,只需改为b_txt.localeCompare(a_txt);

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2021-06-27
    相关资源
    最近更新 更多