1

我使用 .push() 添加了一个 JavaScript 对象,但问题是当我将数据推送到对象时,该对象不再按时间值排序。如何创建相同的对象,但始终按 time_going_hour 排序,然后按 time_going_minutes 排序?

"days": {
    "1": {
        "places": [{
            "url": "/attraction/mauna-kea-summit/19",
                "img_src": "http://trekeffect.images.user_images.s3.amazonaws.com/4_36.jpg",
                "title": "Mauna Kea Summit",
                "time_going_hour": 1,
                "time_going_minutes": 55,
                "duration": "3600",
                "id": 19,
                "type": "attraction",
                "city_id": 6
        }, {
            "url": "/attraction/the-st.-benedict-painted-church/21",
                "img_src": "http://trekeffect.images.user_images.s3.amazonaws.com/4_42.jpg",
                "title": "The St. Benedict Painted Church",
                "time_going_hour": 8,
                "time_going_minutes": 35,
                "duration": "2600",
                "id": 21,
                "type": "attraction",
                "city_id": 6
        }, {
            "url": "/attraction/mauna-kea-summit/19",
                "img_src": "http://trekeffect.images.user_images.s3.amazonaws.com/4_36.jpg",
                "title": "Mauna Kea Summit",
                "time_going_hour": 3,
                "time_going_minutes": 51,
                "duration": "3600",
                "id": 19,
                "type": "attraction",
                "city_id": 6
        }]
    }
4

2 回答 2

5

尝试

places.sort(function(x, y) {
   return x.time_going_hour - y.time_going_hour || 
          x.time_going_minutes - y.time_going_minutes
})

Array.sort接受比较函数。比较函数接受两个参数(此处为xy)并返回以下任一结果:

  • 大于 0(如果x > y),
  • 小于 0(如果x < y),或
  • 正好为 0(如果x == y)。

此比较函数首先尝试返回x'hour 和y'hour 的差值(这样如果 的小时x大于 的小时y,则差为正,否则为负)。如果小时值相等,则小时差为 0,并计算“或”( ) 的右侧部分||(因为0在布尔上下文中计算的是false)。这个右手表达式执行与以前相同的比较,但使用分钟而不是小时。

简而言之,比较函数按小时对值进行排序,如果任何给定元素的小时数相同,它就会按分钟对它们进行子排序。

于 2013-05-20T18:17:26.167 回答
1

您可以在添加/推送后使用 javascript 排序方法对数组进行排序。

sort(function(a,b){
return (a["time_going_hour"]*60+a["time_going_mnutes"]) - (b["time_going_hour"]*60+b["time_going_mnutes"])
})

将此功能应用于您的places阵列

于 2013-05-20T18:17:23.773 回答