2009-12-08 9 views
0

J'ai une collection d'objets ArrayCollection. Chaque objet possède les clés/valeurs suivantes:Actionscript: trier ArrayCollection par date: AAAA-MM-JJ

{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} 

J'ai besoin de trier cette ArrayCollection par date, il serait du passé au présent - comme ceci:

{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} 

J'ai essayé ce qui suit sans l'emporter (pas de tri):

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))); 

Répondre

1

Cela a fonctionné pour moi:

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))); 
+0

Oui, comme je l'ai mentionné, cela fonctionne parce que vous convertissez la date en un nombre de millisecondes depuis l'époque. C'est correct, mais puisque vous utilisez le format américain, la date peut être triée en utilisant le classement lexical. – phtrivier

0

Je ne crois pas que le genre est appliqué jusqu'à ce que vous appelez ArrayCollection.r eFresh():

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

vrai, mais ce qui précède (modifié) ne fonctionne toujours pas le tri par date. Merci Erich – Yozef

1

La façon dont votre création du SortField:

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

De l'API, le dernier paramètre devrait signifier que vous voulez que la valeur à trier numériquement au lieu d'une chaîne.

Quel est le type du champ "date" dans l'objet? Si elle est une chaîne, alors vous voudrez peut-être trier par ordre alphabétique les choses

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

En espérant que cela aide

PH

Questions connexes