添加删除元素: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]