2013-12-09 26 views
0

我正在比较两个数组集合假设collection1和collection2和收集2我有复选框,我在做什么是点击修改按钮,我感到比较这些后2个数组集合我想是哪些元素匹配相应的复选框将自动选择。如果(User360DegreePodCreationView.user360PodView.MyArray并[a] == User360DegreePodCreation如何比较柔性×2点阵列集合时,它匹配复选框被选中

enter code here 



      for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
     { 
      //loop though the second collection 
      for(var b:String in User360DegreePodCreation.user360PodCreation.fieldList.dataProvider)` 

` { //比较收集 .user360PodCreation.fieldList.dataProvider [b] .columnName) {

    var chkBox:CheckBox =new CheckBox; 
        chkBox = User360DegreePodCreation.user360PodCreation.fieldList.dataProvider[b].columnName as CheckBox; 

        chkBox.selected=true; 

MXML文件

     <s:List id="fieldList" 
         width="100%" 
         height="170" 
         enabled="{isEnabled}" 
         dataProvider="{model.profileTableColumns}" 
         click="fieldList_clickHandler(event)"> 
        <s:itemRenderer> 
         <fx:Component id="itemRender"> 
          <s:MXItemRenderer> 
           <fx:Script> 
            <![CDATA[ 

            ]]> 
           </fx:Script> 

           <s:CheckBox left="5" 
              label="{data.columnName}" 
              id="chkColumn" 
              /> 
          </s:MXItemRenderer> 
         </fx:Component> 
        </s:itemRenderer> 
       </s:List> 

按钮的点击我感到比较数据网格的一个阵列收集和列表中的一个ArrayCollection的field..`

   private function modifyBtn_clickHandler(event:MouseEvent):void 
    { 
     User360DegreePodCreation.user360PodCreation.isEnabled=true; 
     User360DegreePodCreation.user360PodCreation.isEditable=true; 
     User360DegreePodCreation.user360PodCreation.displayUpdateButton(); 
     User360DegreePodCreation.user360PodCreation.fieldList.visible=true; 
     User360DegreePodCreation.user360PodCreation.list.visible =false; 
     var userProfile360TableChangeEvent:UserProfile360DegreeTableChangeEvent=new UserProfile360DegreeTableChangeEvent(); 
     userProfile360TableChangeEvent.data.idnId=User360DegreePodCreation.user360PodCreation.drpTable.selectedItem.idnId; 
     userProfile360TableChangeEvent.data.dbPath=User360DegreePodCreation.user360PodCreation.drpTable.selectedItem.externalRefDBPath; 
     userProfile360TableChangeEvent.data.tableName=User360DegreePodCreation.user360PodCreation.drpTable.selectedItem.tableName; 
     userProfile360TableChangeEvent.successHandler=function():void 
     { 
      if (model.profileTableColumns != null && model.profileTableColumns.length != 0) 
      { 
       User360DegreePodCreation.user360PodCreation.onModify(); 
      } 
     } 
     userProfile360TableChangeEvent.dispatch(); 
     //Loop through the first collection 
     for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
     { 
      //loop though the second collection 
      for(var b:String in User360DegreePodCreation.user360PodCreation.fieldList.dataProvider) 
      { 
       //compare collection 
       if(User360DegreePodCreationView.user360PodView.MyArray[a] == User360DegreePodCreation.user360PodCreation.fieldList.dataProvider[b].columnName) 
       { 

        var chkBox:CheckBox =new CheckBox; 
        chkBox = User360DegreePodCreation.user360PodCreation.fieldList.dataProvider[b].columnName as CheckBox; 

        //chkBox.selected=true; 


        //User360DegreePodCreation.user360PodCreation.fieldList.selectedItem 


       } 

      } 
     } 
    } 

here is my datgrid arraycollection 


       var MyArray:ArrayCollection = new ArrayCollection(); //DATA ARRAY 
       trace(dgUser360View.selectedItem.podTitle); 
       for each(var objAux:Object in model.userProfile360DegreeViewDetailsVO.userProfile360Details) //FOR TYPE OBJECT 
       { 

        if(objAux.podTitle==dgUser360View.selectedItem.podTitle) 
        MyArray.addItem(objAux.columnNames) //ADD DATA IN ARRAY 

感谢乌拉圭回合回复@克里斯它工作正常的键值对,但我需要什么假设我有一个数组集合,其动态类型例如onle我很喜欢将士myarray的{分析,ID,端口}一定的价值,第二个数组集合 Myaary2 {分析复选框,ID复选框,端口复选框,nuber复选框,地址复选框} 我只想阵列收集的匹配值获得和无与伦比的元素仍将处于未选中我正在用U分享我做了什么,直到日期

var modifiedProfileColumns:ArrayCollection = new ArrayCollection; 
      /*for(var b:int=0;b<model.profileTableColumns.length;b++) 
      { 
       modifiedProfileColumns.addItem({columnName:model.profileTableColumns[b].columnName,selection:"Yes"}); 
      }*/ 



      //for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
      for(var b:int=0;b<model.profileTableColumns.length;b++) 
      { 
       //loop though the second collection 
       for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
       { 
        //compare collection 
        if(User360DegreePodCreationView.user360PodView.MyArray[a] == model.profileTableColumns[b].columnName) 
        { 
         modifiedProfileColumns.addItem({columnName:model.profileTableColumns[b].columnName,selection:"true"}); 
         break; 
         //modifiedProfileColumns.setItemAt({columnName:model.profileTableColumns[b].columnName,selection:"true"},b+1); 

        } 
        else 
        { 

         modifiedProfileColumns.addItem({columnName:model.profileTableColumns[b].columnName,selection:"false"}); 

        } 


       } 

      } 


      fieldList.dataProvider = modifiedProfileColumns; 
     } 

这里是清单codeing

  <s:List id="fieldList" 
         width="100%" 
         height="170" 
         enabled="{isEnabled}" 
         click="fieldList_clickHandler(event)"> 
        <s:itemRenderer> 
         <fx:Component id="itemRender"> 
          <s:MXItemRenderer> 
           <fx:Script> 
            <![CDATA[ 


            ]]> 
           </fx:Script> 



           <s:CheckBox left="5" 
              label="{data.columnName}" 
              selected="{data.selection=='true'}" 
              id="chkColumn"/> 
          </s:MXItemRenderer> 
         </fx:Component> 
        </s:itemRenderer> 
       </s:List> 

我得到的匹配值的检查,但在第二个系列阵列收集的元素来三次......我想这个问题是循环我不能够找到它。 如果有人可以帮我找出解决方案,我会一直感激......

+0

,你已经把这个代码?在itemrenderer的脚本标签里面? –

+0

你可能想要在这条线上工作,因为它有一个不好的代码气味。 User360DegreePodCreation.user360PodCreation.fieldList.dataProvider并[b] .columnNamE。 –

+0

yaa点击按钮事件我正在比较两个数组集合 – praveen

回答

0

假设你所显示的元素在某种程度上是可识别的(有某种Id属性或某种独特的东西)。我强烈建议不要对集合的所有元素使用double for循环,因为它们应该具有指数运行时行为。

我更建议你创建集合中的元素的索引。如果您的唯一属性(或一组属性),那么您可以使用Object对象来创建基于此属性的索引。

假设你有rerurns的giben项的字符串键的功能。

getItemKey(item:Object):String 

那么我会建议创建一个索引如下:

var index:Object = {}; // This is a shorthand for "var index:Object = new Object(); 
for each(var item:Object in collection1) { 
    var key:String getItemKey(item); 
    index[key] = item; 
} 

具有索引后,你可以得到这样您单击项目的引用:

var clickedItemKey:String = getItemKey(clickedItem); 
if(index[clickedItemKey]) { 
    var itemInCollection1:Object = index[clickedItemKey]; 
    // Do something with the clicked item 
} else { 
    // The item was not found in collection1 
} 

我猜这种方法应该更快,更容易阅读。

+0

感谢您的回复@chris它的键值对正常工作,但我需要的是假设我有MYarray – praveen

+0

好吧,在flex中并不重要,如果“collection1”是一个集合或一个数组。 “对于每一个”都以相同的方式工作。 –

相关问题