2015-12-31 2 views
1

Я Populating массив с набором месяцев, как это:Перестановка последовательность месяцев в порядке

var months=["March 2016","April 2016","May 2016","January 2015","February 2016"] 

Как я могу переставить месяцев, чтобы, как это ниже, учитывая год, а ..:

var months=["January 2015","February 2016","March 2016","April 2016","May 2016",] 

Я попытался отсортировать() месяцы, которые будут сортироваться в алфавитном порядке, что не является логичным. Все предложения для этой проблемы?

+0

_ «Я заселение массив» _ -> это данные уже в виде этих строк при заполнении, или у вас есть доступ к данным в другой форме (например, объекты фактической даты) в настоящее время? –

+1

использовать foreach с ключом значение пара ,,,, разделить значение .. сначала упорядочить его относительно числа (то есть год), чем создать свой собственный массив, как 1 => Январь, 2 => февраль, 3 => Март и т. Д. ... Используйте этот массив для сортировки по отношению к месяцу (когда у вас есть отсортированный массив по отношению к году) –

+0

Имеет ли год какое-либо отношение к обязательному порядку сортировки? – Xotic750

ответ

1

Вы можете использовать объект со значениями его месячного заказа и отсортировать его по значению года и месяца.

var months = ["March 2016", "April 2016", "May 2016", "January 2015", "February 2016"]; 
 

 
months.sort(function (a, b) { 
 
    var MONTH = { January: 0, February: 1, March: 2, April: 3, May: 4, June: 5, July: 6, August: 7, September: 8, October: 9, November: 10, December: 11 }, 
 
     aa = a.split(' '), 
 
     bb = b.split(' '); 
 
    return aa[1] - bb[1] || MONTH[aa[0]] - MONTH[bb[0]]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(months, 0, 4) + '</pre>');

0

Вы можете использовать массив, содержащий список месяцев в качестве ссылки, а затем проверить индекс.

var months=["March 2015","April 2016","May 2016","January 2015","February 2016"]; 
var m = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; 

months.sort(function(a,b){ 
    var yearA = a.split(" ")[1]; 
    var yearB = b.split(" ")[1]; 
    if (yearA != yearB){ return +yearA - +yearB ;} 
    return m.indexOf(a.split(" ")[0]) - m.indexOf(b.split(" ")[0]); 
}); 

// ["January 2015", "March 2015", "February 2016", "April 2016", "May 2016"] 
3

Вы можете конвертировать как для объекта Date, а затем использовать сорт

["March 2016","April 2016","May 2016","January 2015","February 2016"].sort(function(a, b) { 
    return new Date("1 " + a) - new Date("1 " + b); 
}) 

Edit: Спасибо @Hacketo за указание, что getTime() (в первоначальном варианте ответа) является фактически не требуется.

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