2015-06-02 2 views
1

Как найти самую последнюю дату из массива, как показано ниже?Найти самую последнюю дату из Array

Tue Jun 2 17:59:54 GMT+0200 2013 
Tue Jun 5 18:00:10 GMT+0200 2013 
Tue Jun 1 12:27:14 GMT+0200 2013 
Tue Jun 3 17:26:58 GMT+0200 2013 
Tue Jun 9 17:27:49 GMT+0200 2013 
Tue Jun 1 13:27:39 GMT+0200 2015 
Tue Jun 3 12:27:59 GMT+0200 2013 
Tue Jun 6 15:27:22 GMT+0200 2014 
Tue Jun 2 17:27:30 GMT+0200 2014 
+1

Являются ли даты в вашем массиве Date объектами или строками? Вам просто нужно отсортировать объекты Date по времени. Свойство – BadFeelingAboutThis

ответ

1

Предполагая, что ваш массив полон AS3 родных Date объектов, вы можете просто сделать это:

array.sortOn("time",Array.DESCENDING); 

trace("Most Recent:",array[0]); 

Вы не можете использовать array.sort (если вы используете флаг Array.NUMERIC), потому что он сортирует строковое представление даты. Поэтому все ваши дни недели будут сгруппированы вместо фактической даты.


Если ваши даты строки, то вам нужно будет конвертировать их в Дата объектов до сортировки:

//assuming your posted array is in a var called 'stringArray' 

var dateArray:Array = []; //a new array to hold the converted strings 

for(var i:int=0;i<stringArray.length;i++){ 
    dateArray.push(new Date(stringArray[i])); 
} 

dateArray.sortOn("time",Array.DESCENDING); 
trace("Most Recent Date:",dateArray[0]); 

Чтобы показать это в конкретном примере, здесь Опубликованная даты - скопируйте этот код, чтобы получить тот же результат:

var arr:Array = new Array(
    new Date("Tue Jun 2 17:59:54 GMT+0200 2013"), 
    new Date("Tue Jun 5 18:00:10 GMT+0200 2013"), 
    new Date("Tue Jun 1 12:27:14 GMT+0200 2013"), 
    new Date("Tue Jun 3 17:26:58 GMT+0200 2013"), 
    new Date("Tue Jun 9 17:27:49 GMT+0200 2013"), 
    new Date("Tue Jun 1 13:27:39 GMT+0200 2015"), 
    new Date("Tue Jun 3 12:27:59 GMT+0200 2013"), 
    new Date("Tue Jun 6 15:27:22 GMT+0200 2014"), 
    new Date("Tue Jun 2 17:27:30 GMT+0200 2014") 
); 

arr.sort(Array.DESCENDING); 

trace("SORT:"); 
traceDates(); 

arr.sortOn("time",Array.DESCENDING); 
trace("\nSORT ON:"); 
traceDates(); 



function traceDates(){ 
    for(var i:int=0;i<arr.length;i++){ 
     trace(" ",arr[i].fullYear + "-" + arr[i].month + "-" + arr[i].day); 
    } 
} 

//OUTPUT: 
/* 
SORT: 
    2013-5-3 
    2013-5-0 
    2013-5-0 
    2013-5-6 
    2013-5-1 
    2013-5-1 
    2014-5-1 
    2015-5-1 //most recent date, second to LAST item in the array 
    2014-5-5 

SORT ON: 
    2015-5-1 //June 1st is the most recent date (first item in the array) 
    2014-5-5 
    2014-5-1 
    2013-5-0 
    2013-5-3 
    2013-5-1 
    2013-5-1 
    2013-5-0 
    2013-5-6 
*/ 
-1

Sort the array и захватить элемент первого (по убыванию) или последней (по возрастанию).

Редактировать: 2 down-vote, потому что я не привел пример или потому, что люди не знают, что вы можете сортировать даты? Это работает:

var dates:Array = [ 
    "Tue Jun 2 17:59:54 GMT+0200 2013", 
    "Tue Jun 5 18:00:10 GMT+0200 2013", 
    "Tue Jun 1 12:27:14 GMT+0200 2013", 
    "Tue Jun 3 17:26:58 GMT+0200 2013", 
    "Tue Jun 9 17:27:49 GMT+0200 2013", 
    "Tue Jun 1 13:27:39 GMT+0200 2015", 
    "Tue Jun 3 12:27:59 GMT+0200 2013", 
    "Tue Jun 6 15:27:22 GMT+0200 2014", 
    "Tue Jun 2 17:27:30 GMT+0200 2014" 
].map(function(s:String, i:int, a:Array):Date { 
    return new Date(s); 
}).sort(Array.NUMERIC | Array.DESCENDING); 

var latest:Date = dates[0]; // Mon Jun 1 07:27:39 GMT-0400 2015 

Проблема заключается в том, что ОП не дает понять, какие данные они работают с (строками или Date объектов), так что код точным решения неизвестен.

1

Есть ли они Date объектов?
Если да, то вы можете сравнить имущество time каждого из них. Это даст вам миллисекунды с 1 января 1970 года. Самое большое число будет самым последним.

Что-то вдоль этих линий:

var mostRecentDate:Date = dateArray[0]; 
for(var i:int = 0; i < dateArray.length; i++){ 
    if(dateArray[i].time > mostRecentDate.time){ 
     mostRecentDate = dateArray[i]; 
    } 
} 
+0

О, мне нравится идея просто отсортировать массив на основе свойства времени лучше. Не думал об этом. – Cadin

+1

Вы можете просто использовать метод sortOn массива: 'array.sortOn (« time »)' – BadFeelingAboutThis

+0

Если я не ошибаюсь, объект Date действительно сортирует себя довольно хорошо, они также поддерживают операторы сравнения, которые не используют ни одно из их свойств , Например: «dateArray [i] .time> mostRecentDate.время "может быть просто" dateArray [i]> mostRecentDate " – BotMaster

1

Дата объекты действуют как простой номер, когда дело доходит до сортировки и сравнения. Все, что вам нужно сделать, это относиться к ним как к Числам. Так взято из Cadin ответа:

dateArray.sort();  
var oldestDate:Date = dateArray[0]; 

Получит вам самую старую Дату в то время как:

dateArray.sort(Array.DESCENDING);  
var mostRecentDate:Date = dateArray[0]; 

познакомит вас самым последний.

Для LDMS, это то, что я получил:

var firstdate:Date = new Date(); 
var seconddate:Date = new Date(); 
var thirddate:Date = new Date(); 
seconddate.time = firstdate.time + 5000000; 
thirddate.time = firstdate.time + 50000000; 
trace(seconddate > firstdate)//true 
trace(firstdate > seconddate)//false 
trace(seconddate.time > firstdate.time)//true 
var array:Array = [thirddate, firstdate, seconddate]; 
trace(array) 
//Wed Jun 3 03:37:40 GMT-0400 2015,Tue Jun 2 13:44:20 GMT-0400 2015,Tue Jun 2 15:07:40 GMT-0400 2015 
array.sort(); 
trace(array) 
//Tue Jun 2 13:44:20 GMT-0400 2015,Tue Jun 2 15:07:40 GMT-0400 2015,Wed Jun 3 03:37:40 GMT-0400 2015 
array.sort(Array.DESCENDING); 
trace(array) 
//Wed Jun 3 03:37:40 GMT-0400 2015,Tue Jun 2 15:07:40 GMT-0400 2015,Tue Jun 2 13:44:20 GMT-0400 2015 
+0

Довольно конечно, вам нужно использовать 'sortOn (" time ", Array.DESCENDING)' вместо 'sort (Array.DESCENDING)'. Вы действительно пробовали? – BadFeelingAboutThis

+0

Я просто сделал. Не работал – BadFeelingAboutThis

+0

отлично работает для меня – BotMaster