`
cuixuxucui
  • 浏览: 346072 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

AS3 Array学习笔记

阅读更多

详细内容请参见AS3殿堂之路和AS3 API。
一、初始化
1、public dynamic class Array extends Object,位于顶级包中,无需import。
1、AS3中的Array是非类型化的稀疏数组。即不要求元素类型一致,不要求每个索引都有对应值。
2、var a:Array和var a:Array=[],trace出来的a是不同的。一个是null,一个是空白("")。
3、var a:Array=[]比var a:Array=new Array()更有效率。
二、查找
indexOf(searchElement:*, fromIndex:int = 0):int
使用全等运算符 (===) 从左到右搜索数组中的项,并返回该项的索引位置(查不到会返回-1)。
var target:String = "123";
var number_ary:Array = [102,123,134];
trace(target==number_ary[1]);//此处会执行类型转制,输出为true
trace(number_ary.indexOf(target));//-1,查找不到。
另外,lastIndexOf函数与indexOf类似,只不过是从右向左查找。
三、增删
1、push和pop是针对队尾增删,unshift和shift是针对队首增删。
2、push和unshift一次可以添加多个元素,元素间以逗号隔开,两者的函数返回值是增加元素后的数组长度。
3、pop和shift一次只能删除一个元素,函数返回值就是那个被删的元素。shift删除队首元素后,其他元素索引自动减1。
四、splice和slice
1、数组.splice(索引):删除索引位置后所有元素
2、数组.splice(索引,数目):删除索引位置后指定数目的元素
3、数组.splice(索引,数目,新元素1,新元素2,…新元素n):删除索引处指定数目元素后,插入指定新元素。
4、数组.splice(索引,0,新元素1,新元素2,…新元素n):不删除,相当于在索引位置后插入指定新元素。
5、splice的返回值是包含删除元素的数组。
6、splice改变了原数组内容,slice则不会,slice会返回一个包括起点不包括终点的新数组。
7、slice要求起点索引和终点索引作为参数,无终点索引意味着截取到数组末尾,参数全无意味着浅复制整个数组。
五、concat
1、concat返回一个拼接到末尾的新数组,不改变原有数组。参数全无意味着浅复制整个数组。
2、当参数是数组而不是普通元素时,concat会将数组分成元素后按顺序加到末尾,push则不分,直接加入。
六、join
1、function join(sep:*):String,将数组中的元素转换为字符串、在元素间插入指定的分隔符、连接这些元素然后返回结果字符串。嵌套数组总是以逗号 (,) 分隔,而不使用传递给 join() 方法的分隔符分隔。
2、sep:* (default = NaN)在返回字符串中分隔数组元素的字符或字符串。省略此参数则使用逗号作为默认分隔符。
var myArr:Array = new Array("one", "two", "three");
var myStr:String = myArr.join(" and ");
trace(myArr); // one,two,three
trace(myStr); // one and two and three
七、清空
1、array.length=0//2ms,推荐使用此方法清空
2、array=[]或array=new Array()//0ms
3、array=null;//0ms,此时array处于未初始化状态
4、array.splice(0);//15ms
5、遍历后,array.pop();//28ms
6、遍历后,array.shift();//3482ms
八、浅复制和深复制
当数组元素不是基元数据类型,部分或者全部是复杂数据类型时,需要考虑深复制。
import flash.utils.ByteArray;
var foo:Array=["str",[1,2,3],{key:"k",value:"v"}];
var fooBA:ByteArray= new ByteArray();
fooBA.writeObject(foo);
fooBA.position=0;
var bar:Array=fooBA.readObject() as Array;
九、排序
1、reverse():倒置
2、默认情况下,sort()和sortOn()按以下方式排序:
(1)排序区分大小写(Z 优先于 a)。
(2)按升序排序(a 优先于 b)。
(3)修改该数组以反映排序顺序;在排序后的数组中不按任何特定顺序连续放置具有相同排序字段的多个元素。
(4)元素无论属于何种数据类型,都作为字符串进行排序,所以 100 在 99 之前,这是因为 "1" 的字符串值小于 "9" 的字符串值。
3、sort()和sortOn()第二个参数sortOptions可以更改默认的排序方式。可以指定以下五种方式一种或多种,彼此间用OR(|)隔开。
(1)Array.CASEINSENSITIVE值为1,表示大小写不敏感,如果是数字则从小到大。
(2)Array.DESCENDING值为2,倒序排列。
(3)Array.UNIQUESORT值为4,表示必须是唯一性排序,如果比较值结果相同则放弃排序。
(4)Array.RETURNINDEXEDARRAY值为8,返回排序后索引列表,同时保持原数组不变(默认返回排序后数组)。
(5)Array.NUMERIC值为16,强制对数值从小到大排序,否则仍按默认的把数字当字符串处理。
4、sort()第一个参数是compareFunction,默认为空。指定比较函数后,程序会自动把数组中的元素一对对传入比较函数的参数A和B。
如果返回1,A排B后面;如果返回0,不分先后;如果返回-1,A放B前面。
var a:Object={price:20,number:3};
var b:Object={price:10,number:7};
var c:Object={price:50,number:1};
var amountAry:Array=[a,b,c];
function compare(paraA:Object,paraB:Object):int
{
   var resultA:Number=paraA.price*paraA.number;
   var resultB:Number=paraB.price*paraB.number;
   if(resultA>resultB) return 1;//A放B后面,从小到大排列
   if(resultA<resultB) return -1;
   return 0;
}
amountAry.sort(compare);
trace(amountAry[0].price);//50
trace(amountAry[1].price);//20
trace(amountAry[2].price);//10
5、sortOn()第一个参数是fieldName:Object,如果传递多个fieldName参数,则第一个字段表示主排序字段,第二个字段表示下一个排序字段,依此类推。Flash根据Unicode值排序(ASCII是Unicode 的一个子集)。如果所比较的两个元素中均不包含fieldName参数中指定的字段,则认为将该字段设置为undefined,在排序后的数组中将连续放置这些元素,不必遵循任何特定顺序。
var vegetables:Array = new Array();
vegetables.push(new Vegetable("lettuce", 1.49));
vegetables.push(new Vegetable("spinach", 1.89));
vegetables.push(new Vegetable("asparagus", 3.99));
vegetables.push(new Vegetable("celery", 1.29));
vegetables.push(new Vegetable("squash", 1.44));

trace(vegetables);
// lettuce:1.49, spinach:1.89, asparagus:3.99, celery:1.29, squash:1.44

vegetables.sortOn("name");
trace(vegetables);
// asparagus:3.99, celery:1.29, lettuce:1.49, spinach:1.89, squash:1.44

vegetables.sortOn("price", Array.NUMERIC | Array.DESCENDING);
trace(vegetables);
// asparagus:3.99, spinach:1.89, lettuce:1.49, squash:1.44, celery:1.29

class Vegetable {
    public var name:String;
    public var price:Number;

    public function Vegetable(name:String, price:Number) {
        this.name = name;
        this.price = price;
    }

    public function toString():String {
        return " " + name + ":" + price;
    }
}
十、forEach、every、filter、map、some
1、五个方法有一些共同点,第一个参数是回调函数,第二个是thisObject。
(1)forEach(callback:Function,thisObject:*=null):void操作数组中每项元素。回调函数无需返回值。
(2)filter(callback:Function,thisObject:*=null):Array将符合回调函数条件的元素提出来,构成新数组返回。回调函数返回单个新数组元素。
(3)map(callback:Function,thisObject:*=null):Array根据回调函数操作原数组每个元素,并利用回调函数返回结果生成新数组。回调函数返回单个新数组元素。
(4)some(callback:Function,thisObject:*=null):Array只要有一个元素让回调函数返回true,则some返回true。
(5)every(callback:Function,thisObject:*=null):Array所有元素让回调函数返回true,every才返回true。
2、回调函数需要三个参数,即项值、项索引、Array对象。项值相当于数组中的单个元素,如果是同类型则可设置为具体类型,否则为*。项索引必须是整数值,代表单个元素索引。Array对象是当前数组,将数组传给回调函数。
var book1:Object={name:"ActionScript 3 殿堂之路",author:"Kingda"};
var book2:Object={name:"Flex 3 殿堂之路",author:"Kingda"};
var book3:Object={name:"AIR 殿堂之路",author:"Kingda"};
var book4:Object={name:"Flash 5 讲解",author:"Nobody"};
var book5:Object={name:"ActionScript 3 Pattern ",author:"future"};

var bookList:Array=[book1,book2,book3,book4,book5];
var price:Array=[100,200,300,400,500];

//every用法:如果发现有书名含有Flash 5,就表示这套书有过时书
trace("这套书没有过时书?"+bookList.every(noFlash5));
/*输出:
第四本过时了
这套书没有过时书?false
*/
function noFlash5(item:*,index:int,arr:Array):Boolean
{
 if(item.name.indexOf("Flash 5")!=-1)
 {
  trace("第"+(index+1)+"本过时了");
  return false;
 }
 return true;
}

//map的用法:新生成一个书单,将price数组中的价格加入
var newBookList:Array=bookList.map(mapNewList);
trace(newBookList[0].price);
//输出:100
function mapNewList(item:*,index:int,arr:Array):Object
{
 var newBook:Object={};
 newBook.bookname=item.name;
 newBook.author=item.author;
 newBook.price=price[index];
 return newBook;
}

//some的用法:如果发现有作者是Kingda,就标识这套书选了Kingda的书
trace("这套书有Kingda写的吗?"+newBookList.some(isKingda));
//输出:这套书有Kingda写的吗?true
function isKingda(item:*,index:int,arr:Array):Boolean
{
 if(item.author=="Kingda") return true;
 return false;
}

//filter的用法:将作者为Kingda的书挑出来,生成新的书单
var kingdaBookList:Array=newBookList.filter(isKingda);
trace(kingdaBookList[2].author);
//输出:Kingda
trace(kingdaBookList.length);
//输出:3

//forEach用法:给每个书名都加上“RIA系列”几个字,并把作者名是Kingda的,改成“黑羽”
kingdaBookList.forEach(addBookHead);
function addBookHead(item:*,index:int,arr:Array):void
{
 item.bookname="RIA系列:"+item.name;
 item.author="黑羽";
}
for each(var kingdaBook:* in kingdaBookList)
{
 trace("Book:"+kingdaBook.bookname+"Author:"+kingdaBook.author);
}
/*输出
Book:RIA系列:ActionScript 3殿堂之路 Author:黑羽
Book:RIA系列:Flex 3 殿堂之路 Author:黑羽
Book:RIA系列:AIR殿堂之路 Author:黑羽
*/

分享到:
评论
5 楼 cuixuxucui 2012-07-07  
var str:String = "";
var arr:Array = str.split(str);//arr[0] = ""
trace(arr.length);//1
4 楼 cuixuxucui 2012-06-28  
比较数组内容是否相等,不考虑效率,一个简便的写法是a.toString() == b.toString()
3 楼 cuixuxucui 2012-02-22  
数组可以直接添加动态属性
2 楼 cuixuxucui 2011-08-03  
关于深复制和浅复制的例证:
http://sx01117.iteye.com/blog/632765
1 楼 cuixuxucui 2011-04-28  
数组随机:
function randomArr(arr:Array):Array {
        return arr.sort (function(){return Math.random ()>.5?1:-1});
}
摘自http://bbs.9ria.com/viewthread.php?tid=55942

相关推荐

    net学习笔记及其他代码应用

    解2: select top 10 * from A where id &gt; (select max(id) from (select top 30 id from A )as A) 34.面向对象的语言具有________性、_________性、________性 答:封装、继承、多态。 35.能用foreach遍历访问的...

    javascript类型系统 Array对象学习笔记

     Array()仅仅是一种特殊类型的Object(),也就是说,Array()实例基本上是拥有一些额外功能的Object()实例。数组可以保存任何类型的值,这些值可以随时更新或删除,且数组的大小是动态调整的 一、数组创建  与...

    2009 达内Unix学习笔记

    集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss ... 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ ... 命令和参数之间必需用空格隔...

    javascript学习笔记(五) Array 数组类型介绍

    数组的创建 第一种: 代码如下: var colors = ... //创建包含3项 第二种: 代码如下: var colors = [“red”,”blue”,”green”]; var colors = [];//创建一个空数组 注意:数组的索引是从0开始的 1. length属性 len

    Flex新手教程_入门级学习笔记

    1.6 AS数据类型 3 1.7数据类型转换 3 1.8实例方法,实例变量和静态方法,静态变量 4 1.9接口 Interface 4 1.10继承 Inheritance 5 2.ActionScript3.0常用类 6 2.1内容现实类 6 2.2 String 6 2.3 Array类 8 2.4 XML和E4...

    PL/SQL学习笔记

    --varray variable array两个单词的缩写 --数字定义可变数组的最大长度 type mytype is varray(100) of varchar2(100); --定义可变数组变量 --可变数组也必须初始化 var1 mytype:=new mytype('a','b','c'); ...

    numpy与pandas学习笔记

    import numpy as np (1)创建矩阵: a=np.array([ [1,2,3], [2,3,4], [4,5,6]],dtype=np.int64) 函数 说明 np.ones((3,4)) 全是1的矩阵 np.zeros((3,4)) 全是0的矩阵 np.empty((3,4)) 全部元素都几乎...

    【pandas学习笔记(一)】pandas基本使用

    pandas简介 pandas是一个基于numpy的数据处理库,其主要的用途为数据分析及其处理,特别是序列及表格数据 ...&gt;&gt;&gt; arr1 = np.array([1,3,2,5,6,10,7]) &gt;&gt;&gt; s1 =pd.Series(arr1) &gt;&gt;&gt; print(s1) 输出结果为: 0

    Javascript学习笔记之数组的构造函数

    // Result: [1, 2, 3]new Array(1, 2, 3); // Result: [1, 2, 3][3]; // Result: [3]new Array(3); // Result: []new Array('3') // Result: ['3'] 当只有一个参数被传递到数组的构造函数中,并且这个参数还是一个...

    python之numpy包

    Note: 菜鸟学习笔记,简单记录,代码手打 IDE: IPython/Jupyter/Pycharm numpy包学习记录 高级数据结构ndarray numpy包是pandas、matplotlib、seaborn等科学计算包的基础 # pip install numpy import numpy as np ...

    javascript 学习笔记(八)javascript对象

    1、javascript中的内置对象 javascript中除了本身的内置对象,如以下我们所熟悉的对象: •Array •Date •Math •String •RegExp •…… 各个对象都有自己的属性及方法,比如我们经常使用属性及方法 属性:string...

    学习笔记(03):Python数据清洗实战-Pandas常用数据结构series和方法

    data可以为列表,array或者dict index表示索引,必须与数据同长度,name代表对象的名称 建立series的三种方式 1.通过列表来建: import numpy as np import pandas as pd series1 = pd.Series([2,8,3.01,4.8,9.7,...

    javascript从入门到跑路—–小文的js学习笔记(10)——数组(一维数组、二维数组以及三维数组)和冒泡排序

    javascript从入门到跑路—–小文的js学习笔记(1)———script、alert、document。write() 和 console.log 标签 … … javascript从入门到跑路—–小文的js学习笔记目录 ** 含义: 使用单独的变量名来存储一系列的...

    整理Javascript数组学习笔记

    var myarr=new Array(); //定义数组 myarr[0]=80; myarr[1]=60; myarr[2]=99; [removed]("第一个人的成绩是:"+myarr[0]); [removed]("第二个人的成绩是:"+myarr[1]); [removed]("第三个人的成绩是:"+myarr[2]...

    javascript学习笔记(二)数组和对象部分

    javascript对象部分 一:基础部分 ...它们是Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、Error 以及 String 对象。 4.对象只是一种特殊的数据。对象拥有属性和方法。 Ja

    Javascript学习笔记之函数篇(四):arguments 对象

    但它并不是从 Array.prototype 继承而来,实际上,它就是一个对象。 因此,我们不能直接对 arguments 使用一些数组的方法,例如 push, pop 或 slice 等。 所以为了使用这些方法,我们就需要将其转换为一个真正的数组...

    Numpy基础学习

    这是一篇介绍Numpy基础的文章,是我啃书的笔记,不对Numpy的实现原理和高级特性等细节 做过多研究,学会基础的Numpy就可以应对日常的大部分数值型数据的操作,后面的博客我会 继续记录Pandas的学习进程,它将会更加...

    机器学习篇—Numpy数值计算基础(上)

    本文是在学习了Numpy数值计算课程之后,所做的些许笔记。 文章目录导入Numpy第三方库生成Numpy数组几种方法数组的基本操作 导入Numpy第三方库 导入numpy库 import numpy as np 查看数据类型 data.dtype 更改数据...

Global site tag (gtag.js) - Google Analytics