对对象数组进行排序(输出数据但不按顺序排列)

时间:2013-06-20 15:28:12

标签: javascript arrays sorting object

这是返回的一些数据的缩短版本:

var array = 
[{
    "response":
        {
            "itineraries":[
            {
                "price":
                {
                    "totalPricePerPassenger":"104"
                }
            },
            {
                "price":
                {
                    "totalPricePerPassenger":"102"
                }
            },
            {
                "price":
                {
                    "totalPricePerPassenger":"103"
                }
            }
            ]
        }
}];

我的计划是按总价格对数据进行排序。

以下是我用来排序和显示结果的代码:

function sort(a, b){
    var a_price = a.response.itineraries.price.totalPricePerPassenger();
    var b_price = b.response.itineraries.price.totalPricePerPassenger(); 
    return ((a_price < b_price) ? -1 : ((a_price > b_price) ? 1 : 0));
}

var data = array.sort(sort); 
console.log(data);

在上面的console.log中,这是它输出的结果,因为您可以看到价格仍然是原始顺序且没有变化。

Console.log output

关于为什么会发生这种情况的任何想法?我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:4)

function sort(a, b){
    var a_price = a.price.totalPricePerPassenger;
    var b_price = b.price.totalPricePerPassenger; 
    return ((a_price < b_price) ? -1 : ((a_price > b_price) ? 1 : 0));
}

var data = array[0].response.itineraries.sort(sort); 
console.log(data);

您正在排序外部数组,而不是内部数组。这样做会将内部数组返回给数据,但你也可以直接传递数组,因为排序是“就地”发生的