Javascript 在递增和递减多维数组之间切换

Javascript 在递增和递减多维数组之间切换,javascript,multidimensional-array,Javascript,Multidimensional Array,我有一个多维的,并试图切换,但没有按预期工作 我的问题是 1) 当用户再次单击标题和列之间时,如何在升序和降序之间切换 2) 将每个列传递给sort函数以重用该函数的更好方法是什么 3) 如果我的“th”名称相同,我该怎么办 下面是我的代码 <html> <table id="UntilityDataTable" border="1" width="100%"> <thead> <tr> <th><a href="#"

我有一个多维的,并试图切换,但没有按预期工作 我的问题是

1) 当用户再次单击标题和列之间时,如何在升序和降序之间切换

2) 将每个列传递给sort函数以重用该函数的更好方法是什么

3) 如果我的“th”名称相同,我该怎么办

下面是我的代码

<html>


<table id="UntilityDataTable" border="1" width="100%">
<thead>
  <tr>
  <th><a href="#" title="Sort by Description" 
       onclick="return sortTable(this)">Utilities</a></th>
  <th><a href="#" title="Sort 2012" 
       onclick="return sortTable(this)">2012</a></th>
  <th><a href="#" title="Sort 2011" 
       onclick="return sortTable(this)">2011</a></th>
  <th><a href="#" title="Sort Variance" 
       onclick="return sortTable(this)">Var</a></th>
  <th><a href="#" title="Sort 2010" 
       onclick="return sortTable(this)">2010</a></th>
  </tr>
 </thead>
<tbody id="contentsTable"></tbody>
</table>

<script >
 var desc = ["Water", "Heating", "Electric", "Gas"];
 var price12 = ["824", "325", "0", "245"];
 var price11 = ["500", "225", "30", "429"];
 var price10 = ["622", "165", "90", "529"];

 var pricevar = [];
 var UtilityData = [];

for (i = 0; i < desc.length; ++i) {

   pricevar[i] = price12[i] - price11[i];

   if (price12[i] !== 0 && price11[i] !== 0 && price10[i] !== 0) {

       UtilityData.push([desc[i], price12[i], price11[i], pricevar[i], price10[i]]);

    }

 }

 var descending = false;

 function sortTable(link) {

   if (link.firstChild.nodeValue == "Utilities" && !descending) {
       UtilityData.sort(sortutildesnd);
       descending = true;
   } else if (link.firstChild.nodeValue == "Utilities" && descending) {
       UtilityData.sort(sortutilaesnd);
       descending = false;
   }

   if (link.firstChild.nodeValue == "2012" && descending) {
       UtilityData.sort(sortdesnd12);
       descending = false;
   } else if (link.firstChild.nodeValue == "2012" && !descending) {
       UtilityData.sort(sortaesnd12);
       descending = true;
   }

   drawUtilTable("contentsTable");
   return false
 }


 function sortdesnd12(a, b) { return b[1] - a[1]; }

 function sortaesnd12(a, b) { return a[1] - b[1]; }

 // sort ascending
 function sortutilaesnd(a, b) {
     var sortdescA = a[0].toLowerCase(),
         sortdescB = b[0].toLowerCase()
         if (sortdescA < sortdescB) return -1
     if (sortdescA > sortdescB) return 1
     return 0
 }

 // sort descending

 function sortutildesnd(a, b) {
     var sortdescA = a[0].toLowerCase(),
         sortdescB = b[0].toLowerCase()
         if (sortdescB < sortdescA) return -1
     if (sortdescB > sortdescA) return 1
     return 0
 }


  function clearTable(tbody) {
     while (tbody.rows.length > 0) {
         tbody.deleteRow(0);
      }
   }


  function drawUtilTable(tbody) {
   var tr, td;
   tbody = document.getElementById(tbody);
   clearTable(tbody);
   // loop through data source
   for (var i = 0; i < UtilityData.length; i++) {
       tr = tbody.insertRow(tbody.rows.length);
       td = tr.insertCell(tr.cells.length);
       td.setAttribute("align", "left");
       td.setAttribute("width", "25%");
       td.innerHTML = UtilityData[i][0];
       td = tr.insertCell(tr.cells.length);
       td.setAttribute("width", "11%");
       td.innerHTML = UtilityData[i][1];
       td = tr.insertCell(tr.cells.length);
       td.setAttribute("width", "11%");
       td.innerHTML = UtilityData[i][2];
       td = tr.insertCell(tr.cells.length);
       td.setAttribute("width", "11%");
       td.innerHTML = UtilityData[i][3];
       td = tr.insertCell(tr.cells.length);
       td.setAttribute("width", "10%");
       td.innerHTML = UtilityData[i][4];
    }
 }
drawUtilTable("contentsTable");
</script>

var desc=[“水”、“热”、“电”、“气”];
风险值价格12=[“824”、“325”、“0”、“245”];
风险值价格11=[“500”、“225”、“30”、“429”];
var价格10=[“622”、“165”、“90”、“529”];
var价格var=[];
var效用数据=[];
对于(i=0;isortdescB)返回1
返回0
}
//降序排序
函数sortutildesnd(a,b){
var sortdescA=a[0]。toLowerCase(),
sortdescB=b[0]。toLowerCase()
if(sortdescBsortdescA)返回1
返回0
}
函数clearTable(tbody){
while(tbody.rows.length>0){
tbody.deleteRow(0);
}
}
函数drawUtilTable(tbody){
var-tr,td;
tbody=document.getElementById(tbody);
clearTable(tbody);
//循环遍历数据源
对于(var i=0;i
jQuery
使
Javascript
变得简单。它还显著地清理了代码,使其更易于阅读和理解

<html>


<table id="UntilityDataTable" border="1" width="100%">
    <thead>
      <tr>
      <th><a href="#" title="Sort by Description">Utilities</a></th>
      <th><a href="#" title="Sort 2012">2012</a></th>
      <th><a href="#" title="Sort 2011">2011</a></th>
      <th><a href="#" title="Sort Variance">Var</a></th>
      <th><a href="#" title="Sort 2010">2010</a></th>
      </tr>
     </thead>
    <tbody id="contentsTable"></tbody>
    </table>

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        var desc = ["Water","Heating","Electric","Gas"];
        var price12 = ["824","325","0","245"];
        var price11 = ["500","225","30","429"];
        var price10 = ["622","165","90","529"];

        var pricevar =[];
        var UtilityData = [];

        var descending = false;

        for (i = 0; i < desc.length; ++ i) {
            pricevar[i] = price12[i]- price11[i]; 
            if(price12[i] !== 0 && price11[i] !== 0 && price10[i] !== 0) {
                UtilityData.push([desc[i], price12[i], price11[i], pricevar[i], price10[i]]);
            }

        }



        $('th').click(function() {
            var columnTitle = $(this).find('a').html();
            var direction = '';

            switch (columnTitle) {

                case 'Utilities':
                    if (descending) {
                        UtilityData.sort(sortutilaesnd);
                        descending = false; 
                    } else {
                        UtilityData.sort(sortutildesnd);
                        descending = true;   
                    }
                    break;

                case '2012':
                    if (descending) {
                        UtilityData.sort(sortdesnd12);
                        descending = false;   
                    } else {
                        UtilityData.sort(sortaesnd12);
                        descending = true; 
                    }
                    break;

                case '2011':
                    // code goes here
                    break;

                case 'Var':
                    // code goes here
                    break;

                case '2010':
                    // code goes here
                    break;
            }

            drawUtilTable("contentsTable");
            return false;

        });


        function sortdesnd12(a,b){return b[1] - a[1];}
        function sortaesnd12(a,b){return a[1] - b[1];} 


        // sort ascending
    function sortutilaesnd(a,b){
        var sortdescA=a[0].toLowerCase(), sortdescB=b[0].toLowerCase();
        if (sortdescA < sortdescB)  {
            return -1; 
        }
        if (sortdescA > sortdescB) {
            return 1;
        }
        return 0;
    }

        // sort descending

        function sortutildesnd(a,b){
            var sortdescA=a[0].toLowerCase(), sortdescB=b[0].toLowerCase()
            if (sortdescB < sortdescA) {
                return -1;
            }
            if (sortdescB > sortdescA) {
                return 1;
            }
            return 0;
        }


        function clearTable(tbody) {
            while (tbody.rows.length > 0) {
                tbody.deleteRow(0);
            }
        }


    function drawUtilTable(tbody) {
        var tr, td;
        tbody = document.getElementById(tbody);
        clearTable(tbody);

        // loop through data source
        for (var i = 0; i < UtilityData.length; i++) {
            tr = tbody.insertRow(tbody.rows.length);
            td = tr.insertCell(tr.cells.length);
            td.setAttribute("align", "left");
            td.setAttribute("width", "25%");
            td.innerHTML = UtilityData[i][0];
            td = tr.insertCell(tr.cells.length);
            td.setAttribute("width", "11%");
            td.innerHTML = UtilityData[i][1];
            td = tr.insertCell(tr.cells.length);
            td.setAttribute("width", "11%");
            td.innerHTML = UtilityData[i][2];
            td = tr.insertCell(tr.cells.length);
            td.setAttribute("width", "11%");
            td.innerHTML = UtilityData[i][3];
            td = tr.insertCell(tr.cells.length);
            td.setAttribute("width", "10%");
            td.innerHTML = UtilityData[i][4];
        }
    }

    drawUtilTable("contentsTable");
});
</script>
</html> 

$(文档).ready(函数(){
var desc=[“水”、“热”、“电”、“气”];
风险值价格12=[“824”、“325”、“0”、“245”];
风险值价格11=[“500”、“225”、“30”、“429”];
var价格10=[“622”、“165”、“90”、“529”];
var价格var=[];
var效用数据=[];
var=false;
对于(i=0;isortdescB){
返回1;
}
返回0;
}
//降序排序
函数sortutildesnd(a,b){
变量sortdescA=a[0]。toLowerCase(),sortdescB=b[0]。toLowerCase()
if(sortdescBsortdescA){