Flex 数组(Array)属性使用及数组的遍历


[java]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
  3.                 layout="vertical"  
  4.                 verticalAlign="middle"  
  5.                 backgroundColor="white"  
  6.                 initialize="onInit()">  
  7.     <mx:Style>  
  8.         .greenModal {  
  9.             modalTransparencyColor: haloGreen;  
  10.         }  
  11.   
  12.         .redModal {  
  13.             modalTransparencyColor: red;  
  14.         }  
  15.     </mx:Style>  
  16.   
  17.   
  18.     <mx:Script>  
  19.         <!--[CDATA[  
  20.             import mx.controls.Alert;  
  21.             import mx.utils.StringUtil;  
  22.             private var array:Array=[{label: "AAAAA", data: 5}, {label: "BBBBB", data: "liu"}, {label: "CCCCC", data: 3}, {label: "DDDDD", data: 2}, {label: "EEEEE", data: 1}];  
  23.             private var newArray:Array=[{label: "桌子", data: 123.5}, {label: "电脑", data: 4741}];  
  24.             private var arr0:Array=["AAAAA","DDDDD","YYYYY"];  
  25.   
  26.             private function onInit():void  
  27.             {  
  28.                 var concatArray:Array=array.concat(newArray);  
  29.             }  
  30.             //Array.concat属性  
  31.             private function concatArray(arr1:Array,arr2:Array):void  
  32.             {  
  33.                 var arr:Array=arr1.concat(arr2);  
  34.                 dataGrid.dataProvider=arr;  
  35.             }  
  36.               
  37.             //Array.join属性  
  38.             private function joinArray():void  
  39.             {  
  40.                 textArea.text=arr0.join("  ___/n");  
  41.                 dataGrid.dataProvider=arr0;  
  42.             }  
  43.               
  44.             //Array.reverse  
  45.             private function reverseArray():void  
  46.             {  
  47.                 arr0.reverse();  
  48.                 dataGrid.dataProvider=arr0;  
  49.                 textArea.text=arr0.join("/n");  
  50.             }  
  51.               
  52.             //Array.map  
  53.             private function mapArray():void  
  54.             {  
  55.                 var upperArray:Array=arr0.map(toUpper);  
  56.                 dataGrid.dataProvider=upperArray;  
  57.             }  
  58.             private function toUpper(element:*, index:int, arr:Array):String  
  59.             {  
  60.                 return String(element).toLowerCase();  
  61.             }  
  62.   
  63.               
  64.             //for each  
  65.             private function forEachArray():void  
  66.             {  
  67.                 array.forEach(forEach);  
  68.                 dataGrid.dataProvider=array;  
  69.             }  
  70.             private function forEach(element:*,index:int,arr:Array):void  
  71.             {  
  72.                 element.data=element.data+10;  
  73.             }  
  74.               
  75.             //some,当有一个条件满足时就返回结果true,和every相对应,every是全部满足返回true  
  76.             private function someArray():void  
  77.             {  
  78.                 textArea.text="";  
  79.                 var success:Boolean=array.some(isNumeric);  
  80.                 dataGrid.dataProvider=array;  
  81.                 if(success)  
  82.                 {  
  83.                     Alert.show("Success.","Result",Alert.OK);  
  84.                 }  
  85.                 else  
  86.                 {  
  87.                     Alert.show("failed.","Result",Alert.OK);  
  88.                 }  
  89.             }  
  90.               
  91.             //Array.every属性,与for each不同,for each会执行完第个元素,every则是当有一个不满足条件时就返回false结果  
  92.             private function checkArray(arr:Array):void  
  93.             {  
  94.                 textArea.text="";  
  95.                 dataGrid.dataProvider=arr;  
  96.                 //验证数组的全部元素属性是否满足条件  
  97.                 var success:Boolean=arr.every(isNumeric);  
  98.                 if (success)  
  99.                 {  
  100.                     Application.application.styleName="greenModal";  
  101.                     Alert.show("Array is numeric."// text  
  102.                         "SUCCESS"// title  
  103.                         Alert.OK, // flags  
  104.                         null// parent  
  105.                         null); // closeHandler  
  106.                 }  
  107.                 else  
  108.                 {  
  109.                     Application.application.styleName="redModal";  
  110.                     Alert.show("Array has non-numeric elements.""ERROR", Alert.OK, nullnull);  
  111.                 }  
  112.             }  
  113.             private function isNumeric(element:Object, index:int, arr:Array):Boolean  
  114.             {  
  115.                 if((element.hasOwnProperty("data")) && (element.data is Number))  
  116.                 {  
  117.                     var str:String=StringUtil.substitute("{0} ({1})/n", element.label ,element.data);  
  118.                     textArea.text+=str;  
  119.                     return true;  
  120.                 }else return false;  
  121.                   
  122.             }  
  123.         ]]-->  
  124.     </mx:Script>  
  125.     <mx:ApplicationControlBar dock="true">  
  126.         <mx:Button label="Concat"  
  127.                    click="concatArray(array,newArray);"/>  
  128.         <mx:Button label="Join"  
  129.                    click="joinArray();"/>  
  130.         <mx:Button label="Reverse"  
  131.                    click="reverseArray();"/>  
  132.         <mx:Button label="Map"  
  133.                    click="mapArray();"/>  
  134.         <mx:Button label="ForEach"  
  135.                    click="forEachArray();"/>  
  136.         <mx:Button label="Some"  
  137.                    click="someArray();"/>  
  138.         <mx:Button label="Check Array 1"  
  139.                    click="checkArray(array);"/>  
  140.         <mx:Button label="Check Array 2"  
  141.                    click="checkArray(newArray);"/>  
  142.     </mx:ApplicationControlBar>  
  143.     <mx:HBox>  
  144.         <mx:DataGrid id="dataGrid"  
  145.                      rowCount="7">  
  146.             <mx:columns>  
  147.                 <mx:DataGridColumn dataField="label"/>  
  148.                 <mx:DataGridColumn dataField="data"/>  
  149.             </mx:columns>  
  150.         </mx:DataGrid>  
  151.         <mx:TextArea id="textArea"  
  152.                      editable="false"  
  153.                      width="{dataGrid.width}"  
  154.                      height="{dataGrid.height}"/>  
  155.     </mx:HBox>  
  156.   
  157.   
  158. </mx:Application>  

 

Filter :

[java]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
  3.                 layout="vertical"  
  4.                 verticalAlign="middle"  
  5.                 backgroundColor="white"  
  6.                 creationComplete="init()">  
  7.   
  8.     <mx:Script>  
  9.         <!--[CDATA[  
  10.             private var keys:Object={};  
  11.   
  12.             /** 
  13.              * Called by the Application container's creationComplete 
  14.              * event handler. This method creates a new Array object 
  15.              * which will be used as a data provider as well as a 
  16.              * filtered view of that array which does not contain 
  17.              * duplicated items. 
  18.              */  
  19.             private function init():void  
  20.             {  
  21.                 /* Create a dummy data source with some semi-random 
  22.                  data. */  
  23.                 var arr:Array=[];  
  24.                 arr.push({data: 1, label: "one"});  
  25.                 arr.push({data: 1, label: "one"});  
  26.                 arr.push({data: 1, label: "one"});  
  27.                 arr.push({data: 1, label: "one"});  
  28.                 arr.push({data: 2, label: "two"});  
  29.                 arr.push({data: 2, label: "two"});  
  30.                 arr.push({data: 2, label: "two"});  
  31.                 arr.push({data: 1, label: "one"});  
  32.                 arr.push({data: 3, label: "three"});  
  33.                 arr.push({data: 3, label: "three"});  
  34.   
  35.                 /* Filter the original array and call the 
  36.                    removeDuplicates() function on each item 
  37.                  in the array. */  
  38.                 var filteredArr:Array=arr.filter(removedDuplicates);  
  39.   
  40.                 arrColl.source=arr;  
  41.                 dedupedArrColl.source=filteredArr;  
  42.             }  
  43.   
  44.             /** 
  45.              * This method is used to filter an array so that no 
  46.              * duplicate items are created. It works by first 
  47.              * checking to see if a keys object already contains 
  48.              * a key equal to the current value of the item.data 
  49.              * value. If the key already exists, the  current item 
  50.              * will not be readded to the data provider. If the key 
  51.              * does not already exist, add the key to the keys 
  52.              * object and add this item to the data provider. 
  53.              */  
  54.             private function removedDuplicates(item:Object, idx:uint, arr:Array):Boolean  
  55.             {  
  56.                 if (keys.hasOwnProperty(item.label))  
  57.                 {  
  58.                     /* If the keys Object already has this property, 
  59.                      return false and discard this item. */  
  60.                     return false;  
  61.                 }  
  62.                 else  
  63.                 {  
  64.                     /* Else the keys Object does *NOT* already have 
  65.                        this key, so add this item to the new data 
  66.                      provider. */  
  67.                     keys[item.label]=item;  
  68.                     return true;  
  69.                 }  
  70.             }  
  71.         ]]-->  
  72.     </mx:Script>  
  73.   
  74.     <mx:ArrayCollection id="arrColl"/>  
  75.     <mx:ArrayCollection id="dedupedArrColl"/>  
  76.   
  77.     <mx:HBox>  
  78.         <mx:VBox>  
  79.             <mx:Label text="Original ({arrColl.length} items):"/>  
  80.             <mx:List dataProvider="{arrColl}"/>  
  81.         </mx:VBox>  
  82.         <mx:VBox>  
  83.             <mx:Label text="Filtered ({dedupedArrColl.length} items):"/>  
  84.             <mx:List dataProvider="{dedupedArrColl}"/>  
  85.         </mx:VBox>  
  86.     </mx:HBox>  
  87.   
  88. </mx:Application>  

 

搜索数组元素时,可以使用for语句配合break语句

[java]  view plain copy
  1. for(var i:int=0;i<array.length;i++)  
  2. {  
  3.     if(array[i]==match)  
  4.     {  
  5.         trace("Element with index "+i+"found to match "+match);  
  6.         break;  
  7.     }  
  8. }  

但上面这种方法效率不高,在ascb.util.ArrayUtilities类中,提供了findMatchIndex,findLastMatchIndex和findMatchIndices三种方法来搜索数组元素。

使用方法如下,ArrayUtilities.findMatchIndex(数组对象,需要匹配的值,搜索开始下标,布尔值);

其中搜索开始下标默认为0。布尔值表示是否返回部分匹配元素,默认为false,即不返回部分匹配元素。

findLastMatchIndex返回最后一个匹配的元素下标。findMatchIndice返回所有匹配的元素下标数组(注意:返回的结果是下标的数组)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值