请问javascript中数组保存数据的机制是同步的吗

声明了一个数组,获取数据后打印。然后排序,再次打印。
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输出的数组内容均一致,为什么会出现这种情况呢?

阅读 1.2k
1 个回答

你代码里的arr变量是一个引用变量;也就是说两次console.log的参数其实是指向同一个变量地址的,所以结果会一样;你可以尝试console.log(JSON.stringify(arr));就可以看到两次结果是不同的。
另外给两点建议:
1,你的每个json对象的time元素是string类型的,string之间的比较实际是ASCAII码的比较,建议使用Date对象的getTime()获取timestamp值进行比较;
2,Array对象有原生的排序方法sort(),建议使用sort进行排序

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题