AS3学习笔记(二)Array数组操做

添加删除元素:web

查找:indexOf、lastIndexOf,查找的条件是全等匹配,也就是说不会进行类型转换数组

在数组首尾新增元素:push、unshift函数

push方法:在数组尾部新增一个或多个元素。ui

unshift 方法:在数组头部新增一个或多个元素设计

push和unshift 方法都有返回值。返回值是增长元素后的数组长度。code

删除数组首尾元素:pop、shift对象

pop 方法用于将数组最后一个元素删除。排序

shift方法用于将数组第一个元素删除,剩余元素索引值自动减1。索引

pop 和shift 都有返回值。返回值就是那个被删除的元素。ip

 

splice和slice

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

另外要记住,splice改变了原数组的内容。若是只是想获得数组中的一段内容而不想改变原数组,那么应该使用slice方法。Slice方法不改变原数组内容。

slice 获取数组中的部分元素;

有两个参数:一个是截取范围的起点索引,另外一个是截取范围的终点索引。slice 的起点和终点索引值均可以是负值。

若是输入时,不慎将输入的起点索引设置为大于终点索引值,那么slice只会返回一个空数组。

当不传任何参数给slice方法时,将生成原数组的一个浅复制。

 

排序:revese、sort、sortOn

Revese 方法能将数组元素倒序,返回值是新的数组。

Sort 方法是对数组元素排序。有3 种使用方式,以下。

数组.sort(); //默认排序

数组.sort(排序方式);//使用“排序方式”参数来排序,排序方式是一些定义好的整数常量

数组.sort(比较函数);//使用自定义的比较函数,注意此处只写函数名便可

当数组原算是复杂数据类型,且须要根据这种对象的某个属性值来排序时,就须要用到sortOn 方法了。

排序方式,一共有5 种,以下。

Array.CASEINSESITIVES 值为:1,表示大小写不敏感按字母顺序排序,若是是数字则从小到大

Array.DESCENDING 值为:2,表示按字母倒序排列

Array.UNIQUESORT 值为:4,表示必须是惟一性排序,若是比较值结果相同,则放弃排序

Array.RETURNINDEXEDARRAY 值为:8,让sort()和sortOn()函数返回值排序后的索引列表,同时保持原数组不变

Array.NUMERIC or16 值为:16,强制sort()和sortOn()中对数值采用从小到大排序,不然,不设方式,sort()和sortOn()将把数字当成字符串来排序

排序方式能够同时用多个,使用“|”号隔开。

 

操做数组每一个元素;forEach、every、filter、map、some

在ActionScript3中为何没有StringBuilder类呢?其实在ActionScript3的设计过程当中,曾经有过StringBuilder类。但后来,ActionScript3对加法运算符(+)作了修改,使得它在实现复杂字符串(CompoundString)时效率很是高,从而StringBuilder类没有必要再加进去了。底层原理是由于ActionScript3中的复杂字符串实现是一种绳状结构,当“+”时,只是把现有的String 对象连接到原有对象后面,不须要频繁生成新的不变对象。

substring()和slice()也有一些小区别。

substing()的起点和终点不能够为负数,即便用了负数,也会被当成0 来处理。slice()的起点和终点不只能够写正整数,也能够写负数。

 

数组.concat(参数1,参数,参数3…参数n)

concat 可将多个元素或数组拼成一个新的数组,并经过返回值返回,不改变原有数组内容:用法格式以下。参数能够是一个也能够是多个。不传任何参数给concat 方法时,将生成原数组的一个浅复制。

concat和push的不一样点是:

● concat 不改变原有数组内容,而是生成一个新数组返回。push 直接改变原数组内容。

● 当参数是数组时,concat 和push 的行为不一样。concat会将数组分开成各个元素按顺序加入,而push则把这个是数组的参数当成一个元素加入原数组后面。

 

浅复制、深复制

什么时候用浅复制?什么时候用深复制?

当数组元素所有是基元数据类型(primitive data type)时,即所有是值类型时,复制是没有浅复制和深复制的分别的。若须要复制,使用下文中的浅复制方法便可。

可是当数组元素全是复杂数据类型(complex data type),即引用类型时,那么复制就会有两种选择:一种是浅复制,一种是深复制。

当数组部分元素是基元数据,部分元素是复杂类型数据时,也要考虑该采起哪一种复制方式:因为ActionScript3 数组不是类型化数组,容许存储不一样类型的数据,所以这种状况也是很常见的。对于基元数据类型的元素,不论用哪一种方式复制,执行效果都同样。只有对于复杂数据类型的元素,才有深复制和浅复制的区别。

由于对Array这个引用类型,“==”判断的是变量持有对象的引用是否相同,而不是内容相同

使用深复制生成的新数组,其全部元素都是真正的原数组元素的备份。这时两个数组中相同位置的元素,存放的是不一样的引用,指向不一样的对象。可是这两个对象的状态是彻底一致的。

若是生成深复制?这就须要使用到强大的ByteArray 类了。方法见示例

var objectElement:Object = {name:"kingda", web:"www.kingda.org"};

var arrayElement:Array = [1,2,3];

var foo:Array = ["a string element", arrayElement, objectElement];

//如下4 行深复制数组foo

var fooBA:ByteArray = new ByteArray();

fooBA.writeObject(foo);

fooBA.position = 0;

var bar:Array = fooBA.readObject() as Array;

trace (bar);

//输出:a string element,1,2,3,[object Object]
相关文章
相关标签/搜索