0

我有以下代码:

function() {
    $.getJSON(
        myurl + '/get_data',
        function(data) {
            function sort_data(first, second) {
                return (first.sort - second.sort);
            }
            console.log(data);
            console.log(data.sort(sort_data));
        }
        ... snipped for brevity

数据是对象数组,每个对象都有排序字段,它是整数。默认情况下,它们都是随机顺序的。所以执行上面的代码后它告诉我排序前后的数据是相同的。至少两个 console.log 输出是相同的(并且它们是排序的)。但是,如果我跳过排序部分而只是 console.log(data.objects) - 它是不同的并且是未排序的。
似乎先执行排序,然后执行console.logs。为什么会这样?谢谢!

4

1 回答 1

3

这是因为console.log()打印对对象的引用,并且 sort() 重新排列同一对象引用中的数据。

如果您想查看差异,请使用

console.log(JSON.stringify(data));
console.log(JSON.stringify(data.sort(sort_data)));

JSON.stringify()创建 json 对象的字符串表示形式,它不会受到对 json 对象所做的任何进一步更改的影响。

于 2013-04-25T08:48:24.533 回答