【问题标题】:Sort table in javascript, some columns asc and some descjavascript中的排序表,一些列asc和一些desc
【发布时间】:2023-03-24 07:52:01
【问题描述】:

我有一个 javascript 对象数组:

             var json= [
               {
                 "name": "xyz", 
                 "pay": 40, 
                 "rate": 5000, 
                 "totals": 50000 
                },
                { 

                 "name": "abc", 
                 "pay": 30, 
                 "rate": 1400, 
                 "totals": 100000 
                                 }
                ];

我已经成功地在 javascript 中的表格中设置了这个:

            var mytable = $('<table></table>').attr({ id: "myTable" });
            var rows = Object.keys(dataSet).length;
            var cols = dataSet.length;
            var tr = [];
            for (var i = 0; i < rows; i++) {
                var row = $('<tr></tr>').appendTo(mytable);
                row.
                append($('<td>').text(json[i].name)).
                append($('<td>').text(json[i].pay)).
                append($('<td>').text(json[i].rate)).
                append($('<td>').text(json[i].totals)).appendTo(mytable);


            }
            $('body').append(mytable);
                         function sortTable(){
                var $table = $('#myTable');
                console.log($table);
                var $rows = $('tbody > tr',$table);
                $rows.sort(function(a, b){
                    var keyA = $('td',a).text();
                    var keyB = $('td',b).text();
                    return (keyA > keyB) ? 1 : 0;

                });
                $.each($rows, function(index, row){
                  $table.append(row);
                });
            } //this just sorts name alphabetically

但我需要在初始加载时按 desc 顺序对一些列进行排序,而按 asc 顺序对一些列进行排序。

姓名应按字母顺序排序,工资和费率按升序排列,总数按降序排列。我无法找出正确的方法,我无法使用 jquery 表排序器。

任何帮助将不胜感激。

【问题讨论】:

  • 数据是否来自数据库?在 SQL 查询中对其进行排序可能会更容易。
  • 如果没有,在创建表之前使用JavascriptArray:sort()方法对json进行排序。您可以提供一个比较函数,以适当的顺序比较属性。
  • 暂时不行,我已经说 json 数组中还有五个元素。
  • 顺便说一句,您要将行附加到表中两次 - 第一次是在初始化变量时,然后是在附加所有列之后。
  • 您的输入数据实际上是否有多个同名条目?仅当主排序字段有重复项时,按多列排序才有意义,然后在这些字段中进行排序。

标签: javascript jquery sorting


【解决方案1】:

在建表前对数据进行排序:

function compareRow(a, b) {
    if (a.name != b.name) {
        return a.name > b.name ? 1 : -1; // Ascending by name
    }
    if (a.pay != b.pay) {
        return a.pay - b.pay; // Ascending by pay within same name
    }
    if (a.rate != b.rate) {
        return a.rate - b.rate; // Ascending by rate within same name and pay
    }
    return b.totals - a.totals; // Descending by totals within same name, pay, and rate
}
json.sort(compareRow);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-17
    • 2018-05-26
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多