2014-01-15 5 views
0

У меня есть один массив из примерно 10 элементов и массив массивов из примерно 200 элементов. Коллекция массива будет содержать первые 10 предметов где-то там.Фильтр и сортировка ArrayCollection другим массивом

Я хотел бы, чтобы отфильтровать коллекцию массива и порядок его только показать элементы в первом массиве и в порядке, первый массив перечисляет их в

<s:ArrayCollection id="baseballCardCollection" > 
    <fx:Object name="Bill"/> 
    <fx:Object name="Jill"/> 
    <fx:Object name="Phil"/> 
    <fx:Object name="Luke"/> 
    <fx:Object name="Duke"/> 
    <fx:Object name="Zach"/> 
    <fx:Object name="John"/> 
    <fx:Object name="Don"/> 
    <fx:Object name="Ron"/> 
    <fx:Object name="Anne"/> 
    <fx:Object name="Mark"/> 
    <fx:Object name="Clark"/> 
</s:ArrayCollection> 

фильтра и сортировки в порядке:.

<fx:Array> 
    <fx:String>Zach</fx:String> 
    <fx:String>Anne</fx:String> 
    <fx:String>John</fx:String> 
    <fx:String>Mark</fx:String> 
    <fx:String>Luke</fx:String> 
</fx:Array> 

Цель:

<s:ArrayCollection id="baseballCardCollection" > 
    <fx:Object name="Zach"/> 
    <fx:Object name="Anne"/> 
    <fx:Object name="John"/> 
    <fx:Object name="Mark"/>  
    <fx:Object name="Luke"/>   
</s:ArrayCollection> 
+0

Пункт, второй массив всегда будет присутствовать в первом? Если это так, потому что вы не создали третий массив? Потому что, когда вы делаете сортировку, вам нужно просто выполнить небольшой алгоритм поиска, который станет концом тех же функций, которые вам нужно будет загрузить непосредственно в новый массив. – matilu

ответ

1

Вам нужно применить функцию фильтра для ArrayCollection в n включите вашу логику в функцию фильтра. Деталь будет доступен в ArrayCollection если функция фильтра возвращающие еще элемент будет удален из ArrayCollection, но по-прежнему доступен в ArrayCollection.source собственность т.е. baseballCardCollection.source

<fx:Script> 
    <![CDATA[ 
     import mx.collections.Sort; 
     import mx.collections.SortField; 
     import mx.events.FlexEvent; 

     protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
     {  
      fitlerByPersonArray(); 
      sortItemsByName(); 
     } 

     private function fitlerByPersonArray():void {    
      baseballCardCollection.filterFunction = filterByPersonAndAddOrder; 
      baseballCardCollection.refresh() 
     } 

     private function sortItemsByName():void{ 
      var srt:Sort = new Sort(); 
      var orderField:SortField = new SortField("order"); 
      orderField.numeric = true; 

      srt.fields = [orderField]; //Order by 

      baseballCardCollection.sort = srt; 
      baseballCardCollection.refresh(); 
     }   

     private function filterByPersonAndAddOrder(item:Object):Boolean 
     { 
      var index:int = personArray.indexOf(item.name); 

      if(index > -1){ 
       item.order = index; //Create new property called Order then sort with the help of order property 
       return true; 
      } 

      return false;     
     } 

    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
    <s:ArrayCollection id="baseballCardCollection" > 
     <fx:Object name="Bill"/> 
     <fx:Object name="Jill"/> 
     <fx:Object name="Phil"/> 
     <fx:Object name="Luke"/> 
     <fx:Object name="Duke"/> 
     <fx:Object name="Zach"/> 
     <fx:Object name="John"/> 
     <fx:Object name="Don"/> 
     <fx:Object name="Ron"/> 
     <fx:Object name="Anne"/> 
     <fx:Object name="Mark"/> 
     <fx:Object name="Clark"/> 
    </s:ArrayCollection> 

    <fx:Array id="personArray"> 
     <fx:String>Zach</fx:String> 
     <fx:String>Anne</fx:String> 
     <fx:String>John</fx:String> 
     <fx:String>Mark</fx:String> 
     <fx:String>Luke</fx:String>  
    </fx:Array> 

</fx:Declarations> 

<s:List dataProvider="{baseballCardCollection}" labelField="name" width="200" height="400">  
</s:List> 
+0

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

+0

См. Обновленный ответ. –

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