AS3数组学习

indexOf  lastIndexOf

返回索引,查找不到返回-1

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.indexOf("e");
  3. arr.indexOf("b",2); //从第3个元素开始查找
  4. arr.lastIndexOf("b",2); //从第3个元素反向查找
push  unshift

在首尾插入元素,返回增加元素后数组的长度

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.push("h"); //在数组尾部插入元素h
  3. arr.push("i","j","k"); //在数组尾部插入多个元素
  4. arr.unshift("h"); //在数组头部插入元素h
  5. arr.unshift("i","j","k"); //在数组头部插入多个元素
pop  shift

删除首尾元素,返回被删除的元素

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.pop(); //删除尾元素
  3. arr.shift(); //删除首元素 
splice

删除数组一段连续的元素,返回被删除的元素数组

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. arr.splice(删除点的索引,要删除的个数,新元素1,新元素2);
  3. arr.splice(2,3,"o","p","q"); //从索引为2开始,删除3个元素,并插入3个新元素"o","p","q"
  4. arr.splice(-2,3,"o","p","q"); //从倒数为2的索引开始,删除3个元素,并插入3个新元素"o","p","q"
  5. arr.splice(2,3); //单纯的删除从索引2开始的3个元素(不插入)
  6. arr.splice(2); //单纯的删除从索引2开始的所有元素(不插入)
  7. arr.splice(2,0,"x","y","z"); //在索引2的后面插入3个新元素(不删除)
slice

获取数组中的部分元素

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. var newArr:Array = arr.slice(); //浅复制数组
  3. var newArr:Array = arr.slice(2);
  4. var newArr:Array = arr.slice(-2);
  5. var newArr:Array = arr.slice(2,5); 
concat

将多个元素或数组拼接成一个新数组

  1. var arr:Array = ["a","b","c","d","e","f","g"];
  2. var newArr = arr.concat("x","y","z"); //原数组不变,新数组是原数组拼接后的结果
  3. var newArr = arr.concat(); //浅复制数组 
reverse

将数组倒序排列

  1. var arr:Array = ["a","b","c"];
  2. arr.reverse(); //得到"c","b","a" 
sort

sort() 按默认排序,注意:区分大小写,数字也是按字符串来处理

  1. var arr:Array = ["b","c","a"];
  2. arr.sort(); //得到"a","b","c" arr = ["210","1111","30"];
  3. arr.soft(); //得到"1111","210","30" arr = ["b","X","A","c"];
  4. arr.sort(); //得到"A","X","b","c"
  5. var arr:Array = ["b","C",235,"a",38,"X",8641];
  6. trace(arr.sort()); //得到235,38,8641,C,X,a,b 

◆sort(args) 按参数排序,一共有5种(注意:除了Array.RETURNINDEXEDARRAY,其它方式只要排序成功,都会实际改变数组)

 

         sort(Array.CASEINSENSITIVE) 同sort(),不过不区分大小写,数字也是按字符串来处理
  1. var arr = ["b","X","A","c"];
  2. arr.sort(Array.CASEINSENSITIVE); //得到"A","b","c","X" 
         sort(Array.DESCENDING) 按字符串的倒序排列,区分大小写,数字也是按字符串来处理
  1. var arr:Array = ["b","C","a","X",235,8641,38];
  2. trace(arr.sort(Array.DESCENDING)); //得到b,a,X,C,8641,38,235
         sort(Array.UNIQUESORT) 同sort(),如果数组有相同元素,则放弃排序,返回0
  1. var arr:Array = ["b","C","a","X",235,8641,38,2365];
  2. if(arr.sort(Array.UNIQUESORT)=="0")
  3.     trace("有相同元素");
  4. }
  5. else
  6.     trace("没有相同元素");
  7. }
         sort(Array.RETURNINDEXEDARRAY) 同sort(),返回排序后的索引列表,原数组不变
  1. var arr:Array = ["b","C","a","X",235,8641,38,2365];
  2. trace(arr.sort(Array.RETURNINDEXEDARRAY)); //得到4,7,6,5,1,3,2,0
  3. trace(arr); //得到b,C,a,X,235,8641,38,2365(原数组)
         sort(Array.NUMERIC) 按数字从小到大排序,如果数组里含有非数字,会抛出异常
  1. var arr:Array = [235,8641,38,2365];
  2. trace(arr.sort(Array.NUMERIC)); //得到38,235,2365,8641

◆sort(函数名) 按自定义函数比较,该函数必须接受2个参数,返回值为1、-1、0

  1. public function Sample1008()
  2. {
  3.     var objA:Object = {price:200,quantity:2};
  4.     var objB:Object = {price:400,quantity:4};
  5.     var objC:Object = {price:100,quantity:1};
  6.     var arr:Array = [objA,objB,objC];
  7.     trace("原数组是:");
  8.     for(var i:int=0;i<arr.length;i++)
  9.     {
  10.         trace(arr[i].price);
  11.     }
  12.     arr.sort(Compare);
  13.     trace("排序后的数组是:");
  14.     for(var j:int=0;j<arr.length;j++)
  15.     {
  16.         trace(arr[j].price);
  17.     }
  18. }
  19. private function Compare(paraA:Object,paraB:Object):int
  20. {
  21.     var totalPriceA:int = paraA.price * paraA.quantity;
  22.     var totalPriceB:int = paraB.price * paraB.quantity;
  23.     if(totalPriceA>totalPriceB)
  24.     {
  25.         return 1;
  26.     }
  27.     else if(totalPriceA<totalPriceB)
  28.     {
  29.         return -1;
  30.     }
  31.     else
  32.     {
  33.         return 0;
  34.     }
  35. }
  36. /*运行结果是
  37. 原数组是:
  38. 200
  39. 400
  40. 100
  41. 排序后的数组是:
  42. 100
  43. 200
  44. 400*/
sortOn

常用于对象数组的排序

  1. var obj1:MyClass = new MyClass();
  2. var obj2:MyClass = new MyClass();
  3. var obj3:MyClass = new MyClass();
  4. obj1.orderID = 300;
  5. obj2.orderID = 100;
  6. obj3.orderID = 200;
  7. var arr:Array = [obj1,obj2,obj3];
  8. //trace(arr.sortOn("orderID"));
  9. trace(arr.sortOn("orderID",Array.RETURNINDEXEDARRAY)); //得到索引1,2,0 
every

判断数组里的每个元素是否满足某些条件,只有全部都满足才为true

  1. public function Sample1008()
  2. {
  3.     //必须5个人都满70级,才可以进卡拉赞副本
  4.     var player1:Object = {name:"wayne",level:70};
  5.     var player2:Object = {name:"tom",level:69};
  6.     var player3:Object = {name:"jacky",level:70};
  7.     var player4:Object = {name:"andy",level:68};
  8.     var player5:Object = {name:"bill",level:70};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     if(!playerList.every(CheckLevel))
  12.     {
  13.         trace("队伍中有人等级未到70,无法进入副本");
  14.     }
  15. }
  16. private function CheckLevel(item:*,index:int,arr:Array):Boolean
  17. {
  18.     if(item.level<70)
  19.     {
  20.         //trace(item.name+"等级未到70,无法进入副本");
  21.         return false;
  22.     }
  23.     return true;
  24. }
map

映射器,逐个处理数组中的元素,最后生成一个修改后的新数组(不会更改原数组)

  1. public function Sample1008()
  2. {
  3.     var player1:Object = {name:"wayne",level:70};
  4.     var player2:Object = {name:"tom",level:69};
  5.     var player3:Object = {name:"jacky",level:70};
  6.     var player4:Object = {name:"andy",level:68};
  7.     var player5:Object = {name:"bill",level:70};
  8.     
  9.     var playerList:Array = [player1,player2,player3,player4,player5];
  10.     
  11.     for(var i:int = 0; i<playerList.length; i++)
  12.     {
  13.         trace("player"+(i+1)+"的所有属性是:");
  14.         for(var attr:String in playerList[i])
  15.         {
  16.             trace(attr+":"+playerList[i][attr]);
  17.         }
  18.     }
  19.     
  20.     //为每个玩家添加新属性"声望值"
  21.     var newArray:Array = playerList.map(AddNewAttribute);
  22.     
  23.     trace("-----------------Map后的结果-----------------");
  24.     
  25.     for(var j:int = 0; j<newArray.length; j++)
  26.     {
  27.         trace("player"+(j+1)+"的所有属性是:");
  28.         for(var attr2:String in newArray[j])
  29.         {
  30.             trace(attr2+":"+newArray[j][attr2]);
  31.         }
  32.     }
  33. }
  34. private function AddNewAttribute(item:*,index:int,arr:Array):Object
  35. {
  36.     var tmpPlayer:Object = {};
  37.     tmpPlayer.name = item.name;
  38.     tmpPlayer.level = item.level;
  39.     tmpPlayer.repute = 99;
  40.     return tmpPlayer;
  41. }
some

判断数组里的每个元素是否满足某些条件,只要有一个满足就返回true

  1. public function Sample1008()
  2. {
  3.     //主要队伍里有一个人声望达到140以上,则全队可以进副本
  4.     var player1:Object = {name:"wayne",level:70,repute:100};
  5.     var player2:Object = {name:"tom",level:70,repute:190};
  6.     var player3:Object = {name:"jacky",level:70,repute:50};
  7.     var player4:Object = {name:"andy",level:70,repute:230};
  8.     var player5:Object = {name:"bill",level:70,repute:120};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     
  12.     if(playerList.some(CheckRepute))
  13.     {
  14.         trace("可以进入副本");
  15.     }
  16.     else
  17.     {
  18.         trace("队伍里没有成员声望达到140,无法进入副本");
  19.     }
  20. }
  21. private function CheckRepute(item:*,index:int,arr:Array):Boolean
  22. {
  23.     if(item.repute>=140)
  24.     {
  25.         return true;
  26.     }
  27.     return false;
  28. }
filter

将数组里满足特定条件的元素提取出来,生成一个新数组

  1. public function Sample1008()
  2. {
  3.     //得到队伍里所有声望达到要求的成员
  4.     var player1:Object = {name:"wayne",level:70,repute:100};
  5.     var player2:Object = {name:"tom",level:70,repute:190};
  6.     var player3:Object = {name:"jacky",level:70,repute:50};
  7.     var player4:Object = {name:"andy",level:70,repute:230};
  8.     var player5:Object = {name:"bill",level:70,repute:120};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     
  12.     var newArray:Array = playerList.filter(CheckRepute);
  13.     
  14.     for(var i:int=0; i<newArray.length; i++)
  15.     {
  16.         for(var attr:String in newArray[i])
  17.         {
  18.             trace(attr+":"+newArray[i][attr]);
  19.         }
  20.     }
  21. }
  22. private function CheckRepute(item:*,index:int,arr:Array):Boolean
  23. {
  24.     if(item.repute>=140)
  25.     {
  26.         return true;
  27.     }
  28.     return false;
  29. }
forEach

对数组里的元素逐个进行操作,实际改变了数组(不同于map)

  1. public function Sample1008()
  2. {
  3.     //在每个玩家名字前面加上公会名称
  4.     var player1:Object = {name:"wayne",level:70,repute:100};
  5.     var player2:Object = {name:"tom",level:70,repute:190};
  6.     var player3:Object = {name:"jacky",level:70,repute:50};
  7.     var player4:Object = {name:"andy",level:70,repute:230};
  8.     var player5:Object = {name:"bill",level:70,repute:120};
  9.     
  10.     var playerList:Array = [player1,player2,player3,player4,player5];
  11.     
  12.     playerList.forEach(BuildName);
  13.     
  14.     for(var i:int=0; i<playerList.length; i++)
  15.     {
  16.         for(var attr:String in playerList[i])
  17.         {
  18.             trace(attr+":"+playerList[i][attr]);
  19.         }
  20.     }
  21. }
  22. private function BuildName(item:*,index:int,arr:Array):void
  23. {
  24.     item.name = "暗界--"+item.name;
  25. }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值