2012-10-25 67 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