- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
- layout="vertical"
- verticalAlign="middle"
- backgroundColor="white"
- initialize="onInit()">
- <mx:Style>
- .greenModal {
- modalTransparencyColor: haloGreen;
- }
- .redModal {
- modalTransparencyColor: red;
- }
- </mx:Style>
- <mx:Script>
- <!--[CDATA[
- import mx.controls.Alert;
- import mx.utils.StringUtil;
- private var array:Array=[{label: "AAAAA", data: 5}, {label: "BBBBB", data: "liu"}, {label: "CCCCC", data: 3}, {label: "DDDDD", data: 2}, {label: "EEEEE", data: 1}];
- private var newArray:Array=[{label: "桌子", data: 123.5}, {label: "电脑", data: 4741}];
- private var arr0:Array=["AAAAA","DDDDD","YYYYY"];
- private function onInit():void
- {
- var concatArray:Array=array.concat(newArray);
- }
- //Array.concat属性
- private function concatArray(arr1:Array,arr2:Array):void
- {
- var arr:Array=arr1.concat(arr2);
- dataGrid.dataProvider=arr;
- }
- //Array.join属性
- private function joinArray():void
- {
- textArea.text=arr0.join(" ___/n");
- dataGrid.dataProvider=arr0;
- }
- //Array.reverse
- private function reverseArray():void
- {
- arr0.reverse();
- dataGrid.dataProvider=arr0;
- textArea.text=arr0.join("/n");
- }
- //Array.map
- private function mapArray():void
- {
- var upperArray:Array=arr0.map(toUpper);
- dataGrid.dataProvider=upperArray;
- }
- private function toUpper(element:*, index:int, arr:Array):String
- {
- return String(element).toLowerCase();
- }
- //for each
- private function forEachArray():void
- {
- array.forEach(forEach);
- dataGrid.dataProvider=array;
- }
- private function forEach(element:*,index:int,arr:Array):void
- {
- element.data=element.data+10;
- }
- //some,当有一个条件满足时就返回结果true,和every相对应,every是全部满足返回true
- private function someArray():void
- {
- textArea.text="";
- var success:Boolean=array.some(isNumeric);
- dataGrid.dataProvider=array;
- if(success)
- {
- Alert.show("Success.","Result",Alert.OK);
- }
- else
- {
- Alert.show("failed.","Result",Alert.OK);
- }
- }
- //Array.every属性,与for each不同,for each会执行完第个元素,every则是当有一个不满足条件时就返回false结果
- private function checkArray(arr:Array):void
- {
- textArea.text="";
- dataGrid.dataProvider=arr;
- //验证数组的全部元素属性是否满足条件
- var success:Boolean=arr.every(isNumeric);
- if (success)
- {
- Application.application.styleName="greenModal";
- Alert.show("Array is numeric.", // text
- "SUCCESS", // title
- Alert.OK, // flags
- null, // parent
- null); // closeHandler
- }
- else
- {
- Application.application.styleName="redModal";
- Alert.show("Array has non-numeric elements.", "ERROR", Alert.OK, null, null);
- }
- }
- private function isNumeric(element:Object, index:int, arr:Array):Boolean
- {
- if((element.hasOwnProperty("data")) && (element.data is Number))
- {
- var str:String=StringUtil.substitute("{0} ({1})/n", element.label ,element.data);
- textArea.text+=str;
- return true;
- }else return false;
- }
- ]]-->
- </mx:Script>
- <mx:ApplicationControlBar dock="true">
- <mx:Button label="Concat"
- click="concatArray(array,newArray);"/>
- <mx:Button label="Join"
- click="joinArray();"/>
- <mx:Button label="Reverse"
- click="reverseArray();"/>
- <mx:Button label="Map"
- click="mapArray();"/>
- <mx:Button label="ForEach"
- click="forEachArray();"/>
- <mx:Button label="Some"
- click="someArray();"/>
- <mx:Button label="Check Array 1"
- click="checkArray(array);"/>
- <mx:Button label="Check Array 2"
- click="checkArray(newArray);"/>
- </mx:ApplicationControlBar>
- <mx:HBox>
- <mx:DataGrid id="dataGrid"
- rowCount="7">
- <mx:columns>
- <mx:DataGridColumn dataField="label"/>
- <mx:DataGridColumn dataField="data"/>
- </mx:columns>
- </mx:DataGrid>
- <mx:TextArea id="textArea"
- editable="false"
- width="{dataGrid.width}"
- height="{dataGrid.height}"/>
- </mx:HBox>
- </mx:Application>
Filter :
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
- layout="vertical"
- verticalAlign="middle"
- backgroundColor="white"
- creationComplete="init()">
- <mx:Script>
- <!--[CDATA[
- private var keys:Object={};
- /**
- * Called by the Application container's creationComplete
- * event handler. This method creates a new Array object
- * which will be used as a data provider as well as a
- * filtered view of that array which does not contain
- * duplicated items.
- */
- private function init():void
- {
- /* Create a dummy data source with some semi-random
- data. */
- var arr:Array=[];
- arr.push({data: 1, label: "one"});
- arr.push({data: 1, label: "one"});
- arr.push({data: 1, label: "one"});
- arr.push({data: 1, label: "one"});
- arr.push({data: 2, label: "two"});
- arr.push({data: 2, label: "two"});
- arr.push({data: 2, label: "two"});
- arr.push({data: 1, label: "one"});
- arr.push({data: 3, label: "three"});
- arr.push({data: 3, label: "three"});
- /* Filter the original array and call the
- removeDuplicates() function on each item
- in the array. */
- var filteredArr:Array=arr.filter(removedDuplicates);
- arrColl.source=arr;
- dedupedArrColl.source=filteredArr;
- }
- /**
- * This method is used to filter an array so that no
- * duplicate items are created. It works by first
- * checking to see if a keys object already contains
- * a key equal to the current value of the item.data
- * value. If the key already exists, the current item
- * will not be readded to the data provider. If the key
- * does not already exist, add the key to the keys
- * object and add this item to the data provider.
- */
- private function removedDuplicates(item:Object, idx:uint, arr:Array):Boolean
- {
- if (keys.hasOwnProperty(item.label))
- {
- /* If the keys Object already has this property,
- return false and discard this item. */
- return false;
- }
- else
- {
- /* Else the keys Object does *NOT* already have
- this key, so add this item to the new data
- provider. */
- keys[item.label]=item;
- return true;
- }
- }
- ]]-->
- </mx:Script>
- <mx:ArrayCollection id="arrColl"/>
- <mx:ArrayCollection id="dedupedArrColl"/>
- <mx:HBox>
- <mx:VBox>
- <mx:Label text="Original ({arrColl.length} items):"/>
- <mx:List dataProvider="{arrColl}"/>
- </mx:VBox>
- <mx:VBox>
- <mx:Label text="Filtered ({dedupedArrColl.length} items):"/>
- <mx:List dataProvider="{dedupedArrColl}"/>
- </mx:VBox>
- </mx:HBox>
- </mx:Application>
搜索数组元素时,可以使用for语句配合break语句
- for(var i:int=0;i<array.length;i++)
- {
- if(array[i]==match)
- {
- trace("Element with index "+i+"found to match "+match);
- break;
- }
- }
但上面这种方法效率不高,在ascb.util.ArrayUtilities类中,提供了findMatchIndex,findLastMatchIndex和findMatchIndices三种方法来搜索数组元素。
使用方法如下,ArrayUtilities.findMatchIndex(数组对象,需要匹配的值,搜索开始下标,布尔值);
其中搜索开始下标默认为0。布尔值表示是否返回部分匹配元素,默认为false,即不返回部分匹配元素。
findLastMatchIndex返回最后一个匹配的元素下标。findMatchIndice返回所有匹配的元素下标数组(注意:返回的结果是下标的数组)。