2013-05-20 4 views
1

У меня есть объект JavaScript, который я добавляю к использованию .push(), но проблема в том, что когда я нажимаю данные на объект, объект больше не упорядочен по времени. Как я могу создать этот же объект, но всегда ли он быть порядком по времени_очередной_очередной, а затем по time_going_minutes?Как я могу сортировать динамически созданный объект JavaScript по стоимости?

"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 
     }] 
    } 
+1

нажмите значение на массив, а затем отсортируйте массив. –

+1

Исправьте меня, если я ошибаюсь, но я не думаю, что это дубликат, потому что он сортирует более чем одно значение. –

+1

@ karthikr - Ответ, предоставленный в дубликате, не помог мне. –

ответ

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 массиве

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) и возвращает результат, который является либо:

  • больше, чем 0 (если x > y)
  • меньше 0 (если x < y), или
  • точно 0 (если x == y).

Эта функция сравнения сначала пытается вернуть разницу x «час s и y» час s (так что, если час x больше часа y, разница положительна, а в противном случае он отрицательный). Если значения часа равны, то часовая разница равна 0, а правая часть «или» (||) оценивается (поскольку 0, оцененный в булевом контексте, составляет false). Это правое выражение выполняет то же сравнение, что и раньше, но с минутами вместо часов.

Короче говоря, функция сравнения сортирует значения по часам, а если часы одинаковы для любых заданных элементов, она сортирует их по месяцам.

+0

Это должно работать для меня. Я не совсем понимаю это, но спасибо. –

+0

@JasonBiondo. Если вы ищете алгоритмы сортировки, некоторые из них используют операцию сравнения для перемещения элементов назад или вперед в массиве/объекте. В этом случае вычитание часов друг от друга даст либо отрицательное, либо положительное число, которое затем используется для продвижения этого значения вперед или назад в вашем массиве/объекте. Затем протоколы сравниваются для вторичной сортировки на основе этого значения. –

+0

@JasonBiondo Я пошел и отредактировал в объяснении кода thg435. – apsillers

Смежные вопросы