Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在使用javascript对表进行排序时会丢失值_Javascript_Sorting - Fatal编程技术网

为什么在使用javascript对表进行排序时会丢失值

为什么在使用javascript对表进行排序时会丢失值,javascript,sorting,Javascript,Sorting,我正在尝试使用JavaScript对表进行排序 function test() { var table = document.getElementById("myTable"); var allRow = table.getElementsByTagName('tr'); var ar = new Array(); for(var i = 1; i < allRow.length; i++) { ar[i - 1] = allRow[i]

我正在尝试使用JavaScript对表进行排序

function test() {
    var table = document.getElementById("myTable");

    var allRow = table.getElementsByTagName('tr');

    var ar = new Array();
    for(var i = 1; i < allRow.length; i++) {
        ar[i - 1] = allRow[i];
    }

    //sort the data according to number
    ar.sort(function(l, r) {
        var num1 = parseInt(l.childNodes[1].innerHTML);
        var num2 = parseInt(r.childNodes[1].innerHTML);
        return (num1 > num2) ? 1 : ((num1 < num2) ? -1 : 0);
    });
    //assigning the sorted data in the table
    for(var i = 0; i < ar.length; i++) {
        allRow[i + 1].innerHTML = ar[i].innerHTML;
    }
}

当您将元素复制到
ar
数组时,您不是在复制元素,而是在复制对元素的引用。
ar
数组不包含与
allRow
数组内容相同的元素,它包含相同的元素

当您更改
allRow
数组中某个元素的内容时,它在
ar
数组中也会更改,因为它是同一个元素

对数组排序后,从所有行中读取
innerHTML
,然后可以将它们写回:

for(var i = 0; i < ar.length; i++) {
  ar[i] = ar[i].innerHTML;
}
for(var i = 0; i < ar.length; i++) {
  allRow[i + 1].innerHTML = ar[i];
}
for(变量i=0;i
为什么您要用自己的排序功能覆盖排序功能。当排序时,您可以对任何类型的数据(如数字、字母等)进行排序

就这么简单吧

function test() {

        var table = document.getElementById("myTable");
        var allRow = table.getElementsByTagName('tr');            
        var ar = new Array();

        for(var i = 1; i <= allRow.length; i++) {               
             ar[i-1]=table.rows[i-1].cells[0].innerHTML;                
        }           
        ar.sort();
        //assigning the sorted data in the table
        for(var i = 1; i <= allRow.length; i++) {               
             table.rows[i-1].cells[0].innerHTML=ar[i-1];

        }

   }
功能测试(){
var table=document.getElementById(“myTable”);
var allRow=table.getElementsByTagName('tr');
var ar=新数组();

对于(var i=1;我可以在JSFIDLE上发布一个示例吗?排序函数可以返回
num1-num2
function test() {

        var table = document.getElementById("myTable");
        var allRow = table.getElementsByTagName('tr');            
        var ar = new Array();

        for(var i = 1; i <= allRow.length; i++) {               
             ar[i-1]=table.rows[i-1].cells[0].innerHTML;                
        }           
        ar.sort();
        //assigning the sorted data in the table
        for(var i = 1; i <= allRow.length; i++) {               
             table.rows[i-1].cells[0].innerHTML=ar[i-1];

        }

   }