Javascript 反向排序

标签 javascript

当所有要排序的数据都相等时,我在 javascript 反向方法上遇到问题。

这是我的代码:

var ascAgt = false;
        function sortTableAgt() {
            var tbl = document.getElementById("mytable").tBodies[0];
            var store = [];
            for (var i = 0, len = tbl.rows.length; i < len; i++) {
                var row = tbl.rows[i];
                var rowdatedata = row.cells[1].innerHTML;
                store.push([rowdatedata, row]);
            }
            if (ascAgt) {
                store.sort();
                ascAgt = false;
            } else {
                store.sort();
                store.reverse();
                ascAgt = true;
            }
            for (var i = 0, len = store.length; i < len; i++) {
                var idno = i + 1;
                store[i][1].cells[0].innerHTML = idno.toString();
                tbl.appendChild(store[i][1]);
            } store = null;
        }

示例数据:

ID  Name    Date
1   XXXXX   2012/10/05
2   XXXXX   2012/03/16
3   XXXXX   2012/05/18
4   XXXXX   2012/05/18

当我对名称部分进行排序时,我想要的是什么都不会发生,因为名称是相等的,但是当涉及到反向方法时,它只会反转给定的数据。 我在这里错过了什么吗? 提前谢谢你....

最佳答案

因此,您想要的是按第 2 列排序,如果值相等,则也按第 3 列排序。对吧?

sort() 函数也接受回调。你必须使用它。

var ascAgt = false;

function sortTableAgt() {
  var table = document.getElementById("mytable").tBodies[0],
      rows = table.rows,
      len = rows.length,
      i = 0,
      store = [],
      order = ascAgt ? 1 : -1;

  for (i = 0; i < len; i++) {
    store.push(rows[i]);
  }

  store.sort(function(a, b) {
    if (a.cells[1].innerHTML == b.cells[1].innerHTML) {

      // If 2nd cell are equal, sort by 3rd cell
      // Compare them as date (timestamp)
      var dateA = new Date(a.cells[2].innerHTML).getTime(),
          dateB = new Date(b.cells[2].innerHTML).getTime();

      if (dateA == dateB) {
        return 0;
      } else if (dateA < dateB) {
        return -1 * order;
      } else {
        return 1 * order;
      }

    } else if (a.cells[1].innerHTML < b.cells[1].innerHTML) {
      return -1 * order;
    } else {
      return 1 * order;
    }
  });

  for (i = 0; i < len; i++) {
    store[i].cells[0].innerHTML = (i+1).toString();
    table.appendChild(store[i]);
  }
}

您还可以在 JSBin 中查看此演示:http://jsbin.com/welcome/39336/edit

关于Javascript 反向排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068878/

相关文章:

javascript - ACH Stripe 银行账户验证

javascript - Chrome 扩展程序 : communication between background and content scripts

javascript - jQuery 克隆递归

javascript - 从移动浏览器在 whatsapp 中打开文本的自定义 URL 方案,换行符/换行符不起作用

javascript - Paypal 期望传递一个订单 ID

javascript - 在nodejs中向外部模块添加功能

javascript - 使用 googleVis 和 R 的基于订阅的网站的 Web 开发建议

javascript - Vue Tables 2 - 自定义过滤器

javascript - 如何使用 Parse 访问和查询对象的 ID?

javascript - Polymer Project 加载缓慢