`
cuixuxucui
  • 浏览: 350780 次
  • 性别: 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

相关推荐

    As3殿堂之路学习笔记

    AS3殿堂之路的学习笔记旨在帮助初学者理解AS3的基础概念,掌握核心语法,以便在开发富媒体内容和游戏时游刃有余。通过深入学习这些知识点,开发者可以构建功能丰富的交互式应用程序,并逐步进阶到更高级的编程实践。

    as3学习笔记

    这篇学习笔记概述了一些AS3的关键知识点,包括改变SWF属性、鼠标坐标、变量类型的检查、数据类型的传递方式、逻辑运算符的优化、Timer类的使用、访问控制修饰符以及异常处理。 1. **改变SWF属性**: AS3允许开发者...

    flashas3学习笔记

    根据提供的文件信息,我们可以整理出以下关于Flash AS3...以上是基于提供的学习笔记内容整理的关键知识点,这些知识点对于理解和掌握 AS3 的基本概念和编程技巧非常有帮助。希望对学习 Flash AS3 的初学者有所帮助。

    LabVIEW学习笔记 LabVIEW学习笔记

    ### LabVIEW学习笔记知识点梳理 #### 一、调试技巧与数据监测 - **探针工具**: 在调试过程中,可以通过右键菜单中的`probe`和`custom probe`功能来设置探针,用于实时监测数据流。这有助于理解数据如何在各个节点...

    Flex学习笔记-基本语法

    在本文中,我们将深入探讨Flex学习过程中的基础语法,特别是从AS2到AS3的变化。 首先,ActionScript 3(AS3)是AS的一个重大升级,它引入了完全的面向对象编程(OOP)概念。这意味着AS3具有类、继承、封装和多态性...

    AS3笔记

    学习AS3笔记时,通常会深入探讨这些主题,理解并掌握它们能帮助开发者编写高效、可维护的AS3代码。通过阅读《Youthoy的AS3笔记.doc》文档,你将获得更详细的实践经验和技巧。这个文档可能包含了示例代码、问题解答、...

    AS3.0_AS3殿堂之路_笔记[七月经典]

    ### AS3.0_AS3殿堂之路_笔记[七月经典] #### 第2章 ActionScript 3 语言基本元素 本章节将深入探讨ActionScript 3 (AS3) 中的基础语法及核心概念,为后续学习奠定坚实的理论基础。 ##### 2.1.2 数据类型概述 在...

    VBA数组学习笔记.pdf

    VBA 数组学习笔记 VBA 数组学习笔记是指在 Visual Basic for Applications(VBA)中对数组的学习和应用。数组是 VBA 编程中非常重要的一部分,它可以用来存储和处理大量的数据。 数组的声明 在 VBA 中,数组的...

    excel学习笔记(打印版)

    ### Excel学习笔记(打印版)知识点汇总 #### 1. 控制工具栏的启用与禁用 - **知识点**: `Application.CommandBars("Worksheet Menu Bar").Enabled = false` 这一行代码用于禁用Excel中的“工作表菜单栏”。 - **...

    Pytorch入门实战学习笔记

    ### PyTorch 入门实战学习笔记 #### 一、PyTorch简介 PyTorch 是一个基于 Torch 的机器学习库,它支持动态计算图,主要用于应用程序中的深度神经网络研究。PyTorch 提供了丰富的功能,如自动梯度计算、GPU 加速...

    MongoDB_学习笔记

    ### MongoDB 学习笔记知识点详解 #### 一、MongoDB 命令行基础操作 **1.1 帮助命令** - **help**:显示 MongoDB shell 的基本帮助信息。 - **db.help()**:提供当前数据库的帮助信息。 - **db.mycoll.help()**:...

    最新Tutorial 学习笔记 3:Vectorization

    在本教程“最新Tutorial学习笔记3:Vectorization”中,我们将深入探讨向量化的优势、应用以及如何在实际编程中实施。 向量化的核心在于,它能够将原本针对单个元素的操作扩展到整个数组,比如一维的向量或者二维的...

    TypeScript的学习笔记

    ### TypeScript 学习笔记 #### 1. 基本数据类型 TypeScript 扩展了 JavaScript 的数据类型系统,提供了以下几种基本的数据类型: - **`number`**:数值类型,JavaScript 中的所有数字都属于该类型。 - **`string`...

    Php学习笔记.docPhp学习笔记.docPhp学习笔记.doc

    《PHP学习笔记》 在IT领域,PHP是一种广泛使用的服务器端脚本语言,尤其适合Web开发。这篇笔记主要探讨了PHP的基本语法特性,包括它的无类型特性、continue语句的独特用法以及数组的处理。 首先,PHP是无类型的,...

    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遍历访问的...

    thinkphp学习笔记

    ### ThinkPHP 学习笔记详解 #### 入口文件配置 在ThinkPHP框架中,入口文件通常是项目启动的第一个脚本,负责初始化环境并加载核心框架文件。以下是对给定示例中的入口文件代码进行详细解释: ```php define('...

    Flash ActionScript 3 殿堂之路 笔记

    以上是AS3的基础知识,这些内容构成了进一步学习ActionScript 3编程的基石。通过掌握这些,开发者能够更有效地编写和调试代码,构建交互式的Flash应用程序。继续深入,还会涉及到类、包、继承、接口、事件处理等更...

    flex学习笔记,技巧学习

    根据提供的信息,我们可以总结出以下关于Flex学习笔记中的关键技术知识点: ### 1. Flex 基础设置 在Flex开发中,通常会涉及到基础样式的设置。例如,在给定的部分内容中提到了字体大小、颜色及背景色的设置。虽然...

Global site tag (gtag.js) - Google Analytics