如何按值对动态创建的JavaScript对象进行排序?

Jas*_*ndo 1 javascript sorting jquery

我有一个JavaScript对象,我使用.push()添加,但问题是,当我将数据推送到对象时,对象不再按时间值排序.我怎样才能创建这个相同的对象,但始终按照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
        }]
    }
Run Code Online (Sandbox Code Playgroud)

geo*_*org 5

尝试

places.sort(function(x, y) {
   return x.time_going_hour - y.time_going_hour || 
          x.time_going_minutes - y.time_going_minutes
})
Run Code Online (Sandbox Code Playgroud)

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

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

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

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