我有一个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
}]
}
答案 0 :(得分: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
接受比较功能。比较函数有两个参数(这里是x
和y
)并返回一个结果:
x > y
),x < y
)或x == y
)。此比较函数首先尝试返回x
小时和y
小时的差异(如果x
的小时大于{{小时} 1}},差异是正面的,否则它是负面的)。如果小时值相等,则小时差为0,并且评估“或”(y
)的右侧部分(因为在布尔上下文中计算的||
是{{1 }})。这个右手表达式执行与之前相同的比较,但是使用分钟而不是几小时。
简而言之,比较函数按小时对值进行排序,如果任何给定元素的小时数相同,则按分钟对它们进行子排序。
答案 1 :(得分:1)
你可以使用javascript sort方法在添加/推送之后对数组进行排序。
sort(function(a,b){
return (a["time_going_hour"]*60+a["time_going_mnutes"]) - (b["time_going_hour"]*60+b["time_going_mnutes"])
})
在places
数组