2012-10-25 66 views
0

当所有要排序的数据相等时,我在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

9个问​​题.. 0接受。 –

+0

您如何期待'sort'在包含数组的数组上工作?与“reverse”一样。 –

回答

2

不要忘了设置答案为接受答案!其他我不会再帮你的。

所以,你想要的是按第二列排序,如果值相等,也按第三列排序。对?

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 TIS演示:http://jsbin.com/welcome/39336/edit

+1

他忘记将此答案设置为已接受的答案。 – Matmarbon

+0

@Matmarbon逆向心理学最好的! :) – cregox