【问题标题】:Sorting an array of objects (Outputting data but not in order) [closed]对对象数组进行排序(输出数据但不按顺序)[关闭]
【发布时间】:2013-06-20 15:28:11
【问题描述】:

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

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 中,这是它输出的结果,你可以看到价格仍然是原始顺序并且没有变化。

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

【问题讨论】:

  • totalPricePerPassenger 为什么您将其用作函数。不带 () 试试;
  • 不知道我是怎么错过的,哎呀。这和下面的答案似乎解决了这个例子,但不适用于实时 API 响应......

标签: javascript arrays sorting object


【解决方案1】:
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);

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

【讨论】:

  • 这对我上面给出的示例非常有效,但是一旦我将它带入实时 API 响应中,我就会得到“未捕获的类型错误:无法读取未定义的属性“响应”。 :( 编辑:我尝试了 JQuery makeArray 然后做了一点 instanceOf 来查看它是否是一个数组,它说它是,但仍然没有。
  • 这个解决方案是根据上面的数据量身定制的。如果实际数据不同,则需要进行相应调整。这里的总体概念是在数组级别进行排序。因此,弄清楚对象的结构是什么,并深入到数组并对其进行排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多