ActionScript: сортировка ArrayCollection по дате: ГГГГ-ММ-ДД

У меня есть коллекция объектов ArrayCollection. Каждый объект имеет следующие ключи/значения:

{date: 2009-12-01, visits=13555, bouceRate=45}
{date: 2009-12-05, visits=46955, bouceRate=45}
{date: 2009-12-06, visits=13685, bouceRate=45}
{date: 2009-12-02, visits=13685, bouceRate=45}
{date: 2009-12-04, visits=68755, bouceRate=45}
{date: 2009-12-03, visits=35875, bouceRate=45}

Мне нужно отсортировать этот ArrayCollection по дате, чтобы он был от прошлого к настоящему - вот так:

{date: 2009-12-01, visits=13555, bouceRate=45}
{date: 2009-12-02, visits=13685, bouceRate=45}
{date: 2009-12-03, visits=35875, bouceRate=45}
{date: 2009-12-04, visits=68755, bouceRate=45}
{date: 2009-12-05, visits=46955, bouceRate=45}
{date: 2009-12-06, visits=13685, bouceRate=45}

Я пробовал следующее без превалирования (не сортируя):

var dateSort:Sort = new Sort();
    dateSort.fields = [new SortField("date", false, false, true)];

newAreaChartData.sort = dateSort;
newAreaChartData.refresh();

// traceout
for (var i:int = 0; i <newAreaChartData.length; i++)
    trace ("Object #" + i + ": " + ObjectUtil.toString(newAreaChartData.getItemAt(i)));

person Yozef    schedule 08.12.2009    source источник


Ответы (3)


Это сработало для меня:

for(i = 0; i < newAreaChartData.length; ++i) {
    newAreaChartData[i].formattedDate = getActualDate(newAreaChartData[i].date);
    newAreaChartData[i].dateTime =    newAreaChartData[i].formattedDate.time;
    trace(newAreaChartData[i].dateTime);
}

    var dateSort:Sort = new Sort();
    dateSort.fields = [new SortField("dateTime", false, false, true)];
    newAreaChartData.sort = dateSort; 
    newAreaChartData.refresh();

for (var i:int = 0; i <newAreaChartData.length; i++)
    trace ("Object #"+ i + ": " + ObjectUtil.toString(newAreaChartData.getItemAt(i)));
person Yozef    schedule 08.12.2009
comment
Да, как я уже упоминал, это работает, потому что вы конвертируете дату в миллисекунды с начала эпохи. Это нормально, но поскольку вы используете формат США, дату можно отсортировать с использованием лексического порядка. - person phtrivier; 09.12.2009

Как вы создаете SortField :

new SortField("date", false, false, true)

Из API последний должен означать, что вы хотите, чтобы значение было отсортировано в числовом виде, а не в виде строки.

Каков тип поля «дата» в объекте? Если это строка, вы можете отсортировать ее по алфавиту.

new SortField("date", false, false, null)

Надеюсь, это поможет

PH

person phtrivier    schedule 08.12.2009

Я не верю, что сортировка применяется, пока вы не вызовете ArrayCollection.refresh():

newAreaChartData.sort = dateSort;
newAreaChartData.refresh();
person Erich Douglass    schedule 08.12.2009
comment
верно, но приведенное выше (отредактированное) по-прежнему не сортирует его по дате. Спасибо, Эрих. - person Yozef; 08.12.2009