Flex 数组(Array)属性使用及数组的遍历
2012-06-08 11:33
211 查看
[java] view
plaincopy
<?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 :
[java] view
plaincopy
<?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语句
[java] view
plaincopy
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返回所有匹配的元素下标数组(注意:返回的结果是下标的数组)。
plaincopy
<?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 :
[java] view
plaincopy
<?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语句
[java] view
plaincopy
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返回所有匹配的元素下标数组(注意:返回的结果是下标的数组)。
相关文章推荐
- 072.Traverse Array 使用指针遍历数组
- Flex 数组array的使用实例[转帖]
- 使用json-lib遍历数组与对象(JSONArray与JSONObject)
- Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传
- Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传 推荐
- Play前后台使用JsonArray交互,以及使用JQuery遍历array数组和JsonArray
- Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传
- $.map的使用——对数组array中每个元素遍历处理
- 072.Traverse Array 使用指针遍历数组
- Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传
- 使用js遍历出List数组中的对象中的属性
- 使用Iterator遍历数组
- Flex 遍历 ArrayCollection, Array
- table标签,array数组属性及方法-1017.10.30
- 使用for..in时会遍历对象原型中的自定义属性
- Jquery遍历数组之$.inArray()方法介绍
- 使用System.arraycopy()实现数组之间的复制 、 StringUtils.join的使用
- 使用System.arraycopy()实现数组之间的复制
- JS 操作Array数组的方法及属性实例解析
- 07-使用循环进行遍历数组(运算符)