声明了一个数组,获取数据后打印。然后排序,再次打印。
debug时第一个打印情况与最后所得不一致。不明白是什么原理。
<body>
<button id="mybtn">getData</button>
<table id="mytable">
<tr>
<td><input></td>
<td><input type="date"></td>
<td><input type="date"></td>
</tr>
<tr>
<td><input></td>
<td><input type="date"></td>
<td><input type="date"></td>
</tr>
<tr>
<td><input></td>
<td><input type="date"></td>
<td><input type="date"></td>
</tr>
</table>
</body>
<script src="jquery-3.3.1.min.js"></script>
<script>
$(function(){
$("#mybtn").click(getData);
});
function getData(){
var trs = $("#mytable").find('tr');
var arr = new Array();
for(var i=0;i<trs.length;i++){
var data1 = $(trs[i]).find('input').eq(0).val();
var data2 = $(trs[i]).find('input').eq(1).val();
var data3 = $(trs[i]).find('input').eq(2).val();
var json = {
name:data1,
time:data2,
endTime:data3
};
arr.push(json);
}
console.log("sample:");
console.log(arr);
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-i-1;j++){
if(arr[j].time>arr[j+1].time){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log("result:");
console.log(arr);
}
</script>
具体的结果为:
sample和result下得console.log输出的数组内容均一致,为什么会出现这种情况呢?
你代码里的arr变量是一个引用变量;也就是说两次console.log的参数其实是指向同一个变量地址的,所以结果会一样;你可以尝试console.log(JSON.stringify(arr));就可以看到两次结果是不同的。
另外给两点建议:
1,你的每个json对象的time元素是string类型的,string之间的比较实际是ASCAII码的比较,建议使用Date对象的getTime()获取timestamp值进行比较;
2,Array对象有原生的排序方法sort(),建议使用sort进行排序