2016-06-09 3 views
0

Я пытаюсь сортировать массив даты. Это прекрасно. Но 4 мая указана в последнем элементе массива, который является неправильным. Не могли бы вы помочь мне решить эту проблему?Как отсортировать массив даты с помощью javascript?

var listOfString = "2016-05-24|Failed,2016-05-04|Failed,2016-04-19|Passed,2016-04-15|Passed,2016-06-01|Failed"; 
     var arrayStrings = listOfString.split(','); 
     var dateArray = new Array(); 
     var count = 0; 
     for (var i = 0; i < arrayStrings.length; i++) { 
      dateArray[count++] = new Date(arrayStrings[i].split('|')[0]); 
     } 
     dateArray.sort(); 

     for (var i = 0; i < dateArray.length; i++) { 
      alert(dateArray[i]); 
     } 

Выход получил в

Fri Apr 15 2016 05:30:00 GMT+0530 (India Standard Time) 
Tue Apr 19 2016 05:30:00 GMT+0530 (India Standard Time) 
Tue May 24 2016 05:30:00 GMT+0530 (India Standard Time) 
Wed Jun 01 2016 05:30:00 GMT+0530 (India Standard Time) 
Wed May 04 2016 05:30:00 GMT+0530 (India Standard Time) 
+1

Поскольку они уже находятся в порядке y-m-d с предшествующими нулями, почему бы не просто отсортировать строки? Также используйте 'console.log', чтобы увидеть результат, оповещения не являются хорошим способом. –

ответ

0

Решение:

var listOfString = "2016-05-24|Failed,2016-05-04|Failed,2016-04-19|Passed,2016-04-15|Passed,2016-06-01|Failed"; 
     var arrayStrings = listOfString.split(','); 
     var dateArray = new Array(); 
     var count = 0; 
     for (var i = 0; i < arrayStrings.length; i++) { 
      dateArray[count++] = arrayStrings[i].split('|')[0]; 
     } 
     dateArray.sort(); 

     for (var i = 0; i < dateArray.length; i++) { 
      console.log(dateArray[i]); 
     } 
1

Поскольку у вас есть значения как строки в порядке (ГМД) нисходящие и с предшествующими нулями это означает, что они являются сортировкой и как строки. Вам не нужно делать какие-либо преобразования в этом случае, просто сортируйте как строковый массив после split.

0

Измените ваши date.sort() этому

dateArray.sort(function(a,b) { 
     return a-b; 
    }); 

Возвращения

VM126:57 Fri Apr 15 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Tue Apr 19 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Wed May 04 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Tue May 24 2016 05:30:00 GMT+0530 (IST) 
VM126:57 Wed Jun 01 2016 05:30:00 GMT+0530 (IST) 

Вы предполагали, что .sort() автоматически обрабатывать даты, но, к сожалению, это не так. Он либо делает alphabetical, либо numerical сортировать только, и это был результат, который у вас был. Чтобы исправить это, я добавил функцию обратного вызова, которая будет определять, будет ли элемент впереди или позади в порядке сортировки пузыря и вычитания дат возвращает количество секунд между двумя датами, и это будет число и легко вычесть и вернуть разница в сортировке.

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