`
fuerbosi
  • 浏览: 465422 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <mx:Applicationxmlns: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. .redModal{
  12. modalTransparencyColor:red;
  13. }
  14. </mx:Style>
  15. <mx:Script>
  16. <!--[CDATA[
  17. importmx.controls.Alert;
  18. importmx.utils.StringUtil;
  19. privatevararray:Array=[{label:"AAAAA",data:5},{label:"BBBBB",data:"liu"},{label:"CCCCC",data:3},{label:"DDDDD",data:2},{label:"EEEEE",data:1}];
  20. privatevarnewArray:Array=[{label:"桌子",data:123.5},{label:"电脑",data:4741}];
  21. privatevararr0:Array=["AAAAA","DDDDD","YYYYY"];
  22. privatefunctiononInit():void
  23. {
  24. varconcatArray:Array=array.concat(newArray);
  25. }
  26. //Array.concat属性
  27. privatefunctionconcatArray(arr1:Array,arr2:Array):void
  28. {
  29. vararr:Array=arr1.concat(arr2);
  30. dataGrid.dataProvider=arr;
  31. }
  32. //Array.join属性
  33. privatefunctionjoinArray():void
  34. {
  35. textArea.text=arr0.join("___/n");
  36. dataGrid.dataProvider=arr0;
  37. }
  38. //Array.reverse
  39. privatefunctionreverseArray():void
  40. {
  41. arr0.reverse();
  42. dataGrid.dataProvider=arr0;
  43. textArea.text=arr0.join("/n");
  44. }
  45. //Array.map
  46. privatefunctionmapArray():void
  47. {
  48. varupperArray:Array=arr0.map(toUpper);
  49. dataGrid.dataProvider=upperArray;
  50. }
  51. privatefunctiontoUpper(element:*,index:int,arr:Array):String
  52. {
  53. returnString(element).toLowerCase();
  54. }
  55. //foreach
  56. privatefunctionforEachArray():void
  57. {
  58. array.forEach(forEach);
  59. dataGrid.dataProvider=array;
  60. }
  61. privatefunctionforEach(element:*,index:int,arr:Array):void
  62. {
  63. element.data=element.data+10;
  64. }
  65. //some,当有一个条件满足时就返回结果true,和every相对应,every是全部满足返回true
  66. privatefunctionsomeArray():void
  67. {
  68. textArea.text="";
  69. varsuccess:Boolean=array.some(isNumeric);
  70. dataGrid.dataProvider=array;
  71. if(success)
  72. {
  73. Alert.show("Success.","Result",Alert.OK);
  74. }
  75. else
  76. {
  77. Alert.show("failed.","Result",Alert.OK);
  78. }
  79. }
  80. //Array.every属性,与foreach不同,foreach会执行完第个元素,every则是当有一个不满足条件时就返回false结果
  81. privatefunctioncheckArray(arr:Array):void
  82. {
  83. textArea.text="";
  84. dataGrid.dataProvider=arr;
  85. //验证数组的全部元素属性是否满足条件
  86. varsuccess:Boolean=arr.every(isNumeric);
  87. if(success)
  88. {
  89. Application.application.styleName="greenModal";
  90. Alert.show("Arrayisnumeric.",//text
  91. "SUCCESS",//title
  92. Alert.OK,//flags
  93. null,//parent
  94. null);//closeHandler
  95. }
  96. else
  97. {
  98. Application.application.styleName="redModal";
  99. Alert.show("Arrayhasnon-numericelements.","ERROR",Alert.OK,null,null);
  100. }
  101. }
  102. privatefunctionisNumeric(element:Object,index:int,arr:Array):Boolean
  103. {
  104. if((element.hasOwnProperty("data"))&&(element.dataisNumber))
  105. {
  106. varstr:String=StringUtil.substitute("{0}({1})/n",element.label,element.data);
  107. textArea.text+=str;
  108. returntrue;
  109. }elsereturnfalse;
  110. }
  111. ]]-->
  112. </mx:Script>
  113. <mx:ApplicationControlBardock="true">
  114. <mx:Buttonlabel="Concat"
  115. click="concatArray(array,newArray);"/>
  116. <mx:Buttonlabel="Join"
  117. click="joinArray();"/>
  118. <mx:Buttonlabel="Reverse"
  119. click="reverseArray();"/>
  120. <mx:Buttonlabel="Map"
  121. click="mapArray();"/>
  122. <mx:Buttonlabel="ForEach"
  123. click="forEachArray();"/>
  124. <mx:Buttonlabel="Some"
  125. click="someArray();"/>
  126. <mx:Buttonlabel="CheckArray1"
  127. click="checkArray(array);"/>
  128. <mx:Buttonlabel="CheckArray2"
  129. click="checkArray(newArray);"/>
  130. </mx:ApplicationControlBar>
  131. <mx:HBox>
  132. <mx:DataGridid="dataGrid"
  133. rowCount="7">
  134. <mx:columns>
  135. <mx:DataGridColumndataField="label"/>
  136. <mx:DataGridColumndataField="data"/>
  137. </mx:columns>
  138. </mx:DataGrid>
  139. <mx:TextAreaid="textArea"
  140. editable="false"
  141. width="{dataGrid.width}"
  142. height="{dataGrid.height}"/>
  143. </mx:HBox>
  144. </mx:Application>

Filter :

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"
  3. layout="vertical"
  4. verticalAlign="middle"
  5. backgroundColor="white"
  6. creationComplete="init()">
  7. <mx:Script>
  8. <!--[CDATA[
  9. privatevarkeys:Object={};
  10. /**
  11. *CalledbytheApplicationcontainer'screationComplete
  12. *eventhandler.ThismethodcreatesanewArrayobject
  13. *whichwillbeusedasadataprovideraswellasa
  14. *filteredviewofthatarraywhichdoesnotcontain
  15. *duplicateditems.
  16. */
  17. privatefunctioninit():void
  18. {
  19. /*Createadummydatasourcewithsomesemi-random
  20. data.*/
  21. vararr:Array=[];
  22. arr.push({data:1,label:"one"});
  23. arr.push({data:1,label:"one"});
  24. arr.push({data:1,label:"one"});
  25. arr.push({data:1,label:"one"});
  26. arr.push({data:2,label:"two"});
  27. arr.push({data:2,label:"two"});
  28. arr.push({data:2,label:"two"});
  29. arr.push({data:1,label:"one"});
  30. arr.push({data:3,label:"three"});
  31. arr.push({data:3,label:"three"});
  32. /*Filtertheoriginalarrayandcallthe
  33. removeDuplicates()functiononeachitem
  34. inthearray.*/
  35. varfilteredArr:Array=arr.filter(removedDuplicates);
  36. arrColl.source=arr;
  37. dedupedArrColl.source=filteredArr;
  38. }
  39. /**
  40. *Thismethodisusedtofilteranarraysothatno
  41. *duplicateitemsarecreated.Itworksbyfirst
  42. *checkingtoseeifakeysobjectalreadycontains
  43. *akeyequaltothecurrentvalueoftheitem.data
  44. *value.Ifthekeyalreadyexists,thecurrentitem
  45. *willnotbereaddedtothedataprovider.Ifthekey
  46. *doesnotalreadyexist,addthekeytothekeys
  47. *objectandaddthisitemtothedataprovider.
  48. */
  49. privatefunctionremovedDuplicates(item:Object,idx:uint,arr:Array):Boolean
  50. {
  51. if(keys.hasOwnProperty(item.label))
  52. {
  53. /*IfthekeysObjectalreadyhasthisproperty,
  54. returnfalseanddiscardthisitem.*/
  55. returnfalse;
  56. }
  57. else
  58. {
  59. /*ElsethekeysObjectdoes*NOT*alreadyhave
  60. thiskey,soaddthisitemtothenewdata
  61. provider.*/
  62. keys[item.label]=item;
  63. returntrue;
  64. }
  65. }
  66. ]]-->
  67. </mx:Script>
  68. <mx:ArrayCollectionid="arrColl"/>
  69. <mx:ArrayCollectionid="dedupedArrColl"/>
  70. <mx:HBox>
  71. <mx:VBox>
  72. <mx:Labeltext="Original({arrColl.length}items):"/>
  73. <mx:ListdataProvider="{arrColl}"/>
  74. </mx:VBox>
  75. <mx:VBox>
  76. <mx:Labeltext="Filtered({dedupedArrColl.length}items):"/>
  77. <mx:ListdataProvider="{dedupedArrColl}"/>
  78. </mx:VBox>
  79. </mx:HBox>
  80. </mx:Application>

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

  1. for(vari:int=0;i<array.length;i++)
  2. {
  3. if(array[i]==match)
  4. {
  5. trace("Elementwithindex"+i+"foundtomatch"+match);
  6. break;
  7. }
  8. }

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

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

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

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

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <mx:Applicationxmlns: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. .redModal{
  12. modalTransparencyColor:red;
  13. }
  14. </mx:Style>
  15. <mx:Script>
  16. <!--[CDATA[
  17. importmx.controls.Alert;
  18. importmx.utils.StringUtil;
  19. privatevararray:Array=[{label:"AAAAA",data:5},{label:"BBBBB",data:"liu"},{label:"CCCCC",data:3},{label:"DDDDD",data:2},{label:"EEEEE",data:1}];
  20. privatevarnewArray:Array=[{label:"桌子",data:123.5},{label:"电脑",data:4741}];
  21. privatevararr0:Array=["AAAAA","DDDDD","YYYYY"];
  22. privatefunctiononInit():void
  23. {
  24. varconcatArray:Array=array.concat(newArray);
  25. }
  26. //Array.concat属性
  27. privatefunctionconcatArray(arr1:Array,arr2:Array):void
  28. {
  29. vararr:Array=arr1.concat(arr2);
  30. dataGrid.dataProvider=arr;
  31. }
  32. //Array.join属性
  33. privatefunctionjoinArray():void
  34. {
  35. textArea.text=arr0.join("___/n");
  36. dataGrid.dataProvider=arr0;
  37. }
  38. //Array.reverse
  39. privatefunctionreverseArray():void
  40. {
  41. arr0.reverse();
  42. dataGrid.dataProvider=arr0;
  43. textArea.text=arr0.join("/n");
  44. }
  45. //Array.map
  46. privatefunctionmapArray():void
  47. {
  48. varupperArray:Array=arr0.map(toUpper);
  49. dataGrid.dataProvider=upperArray;
  50. }
  51. privatefunctiontoUpper(element:*,index:int,arr:Array):String
  52. {
  53. returnString(element).toLowerCase();
  54. }
  55. //foreach
  56. privatefunctionforEachArray():void
  57. {
  58. array.forEach(forEach);
  59. dataGrid.dataProvider=array;
  60. }
  61. privatefunctionforEach(element:*,index:int,arr:Array):void
  62. {
  63. element.data=element.data+10;
  64. }
  65. //some,当有一个条件满足时就返回结果true,和every相对应,every是全部满足返回true
  66. privatefunctionsomeArray():void
  67. {
  68. textArea.text="";
  69. varsuccess:Boolean=array.some(isNumeric);
  70. dataGrid.dataProvider=array;
  71. if(success)
  72. {
  73. Alert.show("Success.","Result",Alert.OK);
  74. }
  75. else
  76. {
  77. Alert.show("failed.","Result",Alert.OK);
  78. }
  79. }
  80. //Array.every属性,与foreach不同,foreach会执行完第个元素,every则是当有一个不满足条件时就返回false结果
  81. privatefunctioncheckArray(arr:Array):void
  82. {
  83. textArea.text="";
  84. dataGrid.dataProvider=arr;
  85. //验证数组的全部元素属性是否满足条件
  86. varsuccess:Boolean=arr.every(isNumeric);
  87. if(success)
  88. {
  89. Application.application.styleName="greenModal";
  90. Alert.show("Arrayisnumeric.",//text
  91. "SUCCESS",//title
  92. Alert.OK,//flags
  93. null,//parent
  94. null);//closeHandler
  95. }
  96. else
  97. {
  98. Application.application.styleName="redModal";
  99. Alert.show("Arrayhasnon-numericelements.","ERROR",Alert.OK,null,null);
  100. }
  101. }
  102. privatefunctionisNumeric(element:Object,index:int,arr:Array):Boolean
  103. {
  104. if((element.hasOwnProperty("data"))&&(element.dataisNumber))
  105. {
  106. varstr:String=StringUtil.substitute("{0}({1})/n",element.label,element.data);
  107. textArea.text+=str;
  108. returntrue;
  109. }elsereturnfalse;
  110. }
  111. ]]-->
  112. </mx:Script>
  113. <mx:ApplicationControlBardock="true">
  114. <mx:Buttonlabel="Concat"
  115. click="concatArray(array,newArray);"/>
  116. <mx:Buttonlabel="Join"
  117. click="joinArray();"/>
  118. <mx:Buttonlabel="Reverse"
  119. click="reverseArray();"/>
  120. <mx:Buttonlabel="Map"
  121. click="mapArray();"/>
  122. <mx:Buttonlabel="ForEach"
  123. click="forEachArray();"/>
  124. <mx:Buttonlabel="Some"
  125. click="someArray();"/>
  126. <mx:Buttonlabel="CheckArray1"
  127. click="checkArray(array);"/>
  128. <mx:Buttonlabel="CheckArray2"
  129. click="checkArray(newArray);"/>
  130. </mx:ApplicationControlBar>
  131. <mx:HBox>
  132. <mx:DataGridid="dataGrid"
  133. rowCount="7">
  134. <mx:columns>
  135. <mx:DataGridColumndataField="label"/>
  136. <mx:DataGridColumndataField="data"/>
  137. </mx:columns>
  138. </mx:DataGrid>
  139. <mx:TextAreaid="textArea"
  140. editable="false"
  141. width="{dataGrid.width}"
  142. height="{dataGrid.height}"/>
  143. </mx:HBox>
  144. </mx:Application>

Filter :

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"
  3. layout="vertical"
  4. verticalAlign="middle"
  5. backgroundColor="white"
  6. creationComplete="init()">
  7. <mx:Script>
  8. <!--[CDATA[
  9. privatevarkeys:Object={};
  10. /**
  11. *CalledbytheApplicationcontainer'screationComplete
  12. *eventhandler.ThismethodcreatesanewArrayobject
  13. *whichwillbeusedasadataprovideraswellasa
  14. *filteredviewofthatarraywhichdoesnotcontain
  15. *duplicateditems.
  16. */
  17. privatefunctioninit():void
  18. {
  19. /*Createadummydatasourcewithsomesemi-random
  20. data.*/
  21. vararr:Array=[];
  22. arr.push({data:1,label:"one"});
  23. arr.push({data:1,label:"one"});
  24. arr.push({data:1,label:"one"});
  25. arr.push({data:1,label:"one"});
  26. arr.push({data:2,label:"two"});
  27. arr.push({data:2,label:"two"});
  28. arr.push({data:2,label:"two"});
  29. arr.push({data:1,label:"one"});
  30. arr.push({data:3,label:"three"});
  31. arr.push({data:3,label:"three"});
  32. /*Filtertheoriginalarrayandcallthe
  33. removeDuplicates()functiononeachitem
  34. inthearray.*/
  35. varfilteredArr:Array=arr.filter(removedDuplicates);
  36. arrColl.source=arr;
  37. dedupedArrColl.source=filteredArr;
  38. }
  39. /**
  40. *Thismethodisusedtofilteranarraysothatno
  41. *duplicateitemsarecreated.Itworksbyfirst
  42. *checkingtoseeifakeysobjectalreadycontains
  43. *akeyequaltothecurrentvalueoftheitem.data
  44. *value.Ifthekeyalreadyexists,thecurrentitem
  45. *willnotbereaddedtothedataprovider.Ifthekey
  46. *doesnotalreadyexist,addthekeytothekeys
  47. *objectandaddthisitemtothedataprovider.
  48. */
  49. privatefunctionremovedDuplicates(item:Object,idx:uint,arr:Array):Boolean
  50. {
  51. if(keys.hasOwnProperty(item.label))
  52. {
  53. /*IfthekeysObjectalreadyhasthisproperty,
  54. returnfalseanddiscardthisitem.*/
  55. returnfalse;
  56. }
  57. else
  58. {
  59. /*ElsethekeysObjectdoes*NOT*alreadyhave
  60. thiskey,soaddthisitemtothenewdata
  61. provider.*/
  62. keys[item.label]=item;
  63. returntrue;
  64. }
  65. }
  66. ]]-->
  67. </mx:Script>
  68. <mx:ArrayCollectionid="arrColl"/>
  69. <mx:ArrayCollectionid="dedupedArrColl"/>
  70. <mx:HBox>
  71. <mx:VBox>
  72. <mx:Labeltext="Original({arrColl.length}items):"/>
  73. <mx:ListdataProvider="{arrColl}"/>
  74. </mx:VBox>
  75. <mx:VBox>
  76. <mx:Labeltext="Filtered({dedupedArrColl.length}items):"/>
  77. <mx:ListdataProvider="{dedupedArrColl}"/>
  78. </mx:VBox>
  79. </mx:HBox>
  80. </mx:Application>

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

  1. for(vari:int=0;i<array.length;i++)
  2. {
  3. if(array[i]==match)
  4. {
  5. trace("Elementwithindex"+i+"foundtomatch"+match);
  6. break;
  7. }
  8. }

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

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

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics