Flash AS3.0 数组应用
数组有两种形式:
第一种:数字形式的数组:
var myNumber:Array = new Array(1,2,3,4,5);
第二种:文本形式的数组:
var myString:Array=["张志晨","王升军","宋广佳"]
换言之,数组的值是字符串型的应该用 [ ] 创建,是
数字型的则用 ( )创建。
创建一维数组,同时也进行了初始化。
2 数组应用
push 在数组尾部增加一个元素
pop 删除数组的最后一个元素
shift 删除数组的第一个元素
indexof 返回该元素在数组中的位置
sort 对数组进行自定义排序
splice 将元素添加到指定的位置并删除所需元素
concat 将指定的元素与原来的数组连接
join 将数组中的元素转为字符串,在元素之间插入指定分隔符,返回字符串
unshift 在元素的开始增加一个元素
reverse 把现有的数组的顺序完全倒过来
这里都是常用的一些方法,经常会用到,还老是忘记,这里就稍微总结下,在做游戏和一些程序的时候会经常用到,用数组来存取读取简单的数据还是非常容易方便的。
3 理解数组[学习笔记]
数组:也叫索引数组。
索引数组是一个对象,其属性由表示该属性在数组中位置的数字来标识。此数字称为索引。所有索引数组都从零开始,这意味着数组中的第一个元素为 [0],第二个元素为 [1],依此类推。
4 创建数组[学习笔记]
若要创建一个 Array 对象,请使用构造函数 new Array()。如:
var myNumber:Array = new Array(1,2,3,4,5);
5 访问数组[学习笔记]
访问数组中的元素,请使用数组访问运算符 ([])。如:
myNumber[0] = 1;
6 多维数组[学习笔记]
您可以创建一个多维数组。
方法是创建一个索引数组,然后给它的每个元素分配不同的索引数组。这样的数组被视为是多维的,
原因是它可用于表示表中的数据。
8 数组应用1[学习笔记]
创建一个长度为0的空数组
var myArr:Array = new Array();
9 数组应用2[学习笔记]
创建一个长度为10的数组,0索引为字符串"张志晨",并添加新元素--字符串"张景利。
var myArr:Array = new Array(10);
myArr[0] = "张志晨";
myArr.push("张景利");
10 数组应用3[学习笔记]
创建一数组,并直接赋值.
var myArr:Array = new Array("得权小学", "文化小学", "红星小学");
11 二维数组[学习笔记]
中学数学无手直角坐标系中,点的坐标表示为:A(x,y)。
可是在flash里,表示为A[x][y],看上去有点散,不直观。但只要我学习AS3.0,就只能这么做。埋怨什么也没用。
//创建二维数组myArray[9][9](九九方阵):
var myArray:Array = new Array();
//赋值
for(var i=0;i<9;i++)
{
myArray[i] = new Array();
for(var j=0;j<9;j++)
{
myArray[i][j] =i*9+j
}
}
用双循环来完成。
12 回复:Flash AS3.0 数组应用[学习笔记]
中学数学 直角坐标系中,点的坐标表示为:A(x,y)。
可是在flash里,表示为A[x][y],看上去有点散,不直观。但只要我学习AS3.0,就只能这么做。埋怨什么也没用。
//创建二维数组myArray[9][9](九九方阵):
var myArray:Array = new Array();
//赋值
for(var i=0;i<9;i++)
{
myArray[i] = new Array();
for(var j=0;j<9;j++)
{
myArray[i][j] =i*9+j
}
}
用双循环来完成。
13 回复:Flash AS3.0 数组应用[学习笔记]
构造函数摘要
长度 : uint
方法摘要
1. Array(numElements:int = 0)
创建一个长度为 0 或更大的新数组,或者创建由一列指定的元素(这些元素可能具有不同的数据类型)填充的数组。
使用 Array() 创建下列各项之一:
空数组
具有特定长度,但其元素未定义值的数组
其元素具有特定值的数组
使用此函数类似于使用 Array 构造函数创建数组。
您可以传递一个数字 (numElements) 或者传递包含一个或多个不同类型的一列元素 (element0, element1, ... elementN)。
能够接受一种以上数据类型的参数以 Object 类型在签名中列出。
参数:
numElements:int(默认:0) [可选] - 一个指定数组中元素数量的正整数。您可以指定 numElements,也可以指定元素列表,但不能同时指定两者。
实例一:
创建一个长度为0的空数组
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_Array extends Sprite {
public function Array_Array() {
var myArr:Array = new Array();
trace(myArr.length); // 0
}
}
}
实例二:
创建一个长度为5的数组,0索引为字符串"one",并添加新元素--字符串"six"[需调用数组函数push()]
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_Array_2 extends Sprite {
public function Array_Array_2() {
var myArr:Array = new Array(5);
trace(myArr.length); // 5
myArr[0] = "one";
myArr.push("six");
trace(myArr); // one,,,,,six
trace(myArr.length); // 6
}
}
}
2. Array(... values)
创建一列新数组,并直接赋值.
语法:public function Array(numElements:int = 0)
参数:
... values --从0索引直接赋值到更多索引
实列:
创建一个长度为3的新数组,并赋值--字符串"one","two","three"
14 回复:Flash AS3.0 数组应用[学习笔记]
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_Array_3 extends Sprite {
public function Array_Array_3() {
var myArr:Array = new Array("one", "two", "three");
trace(myArr.length); // 3
trace(myArr); // one,two,three
}
}
}
3. concat()
将参数中指定的元素与数组中的元素连接,并创建新的数组
as3.0语法: function concat(... args):Array
参数:
... args :可以是存储各种各样的数据类型,包括数字、字符串、对象,如果赋值为空,将复制原数组并创建新数组.
返回:数组
实例:
创建numbers数组,并赋值--1,2,3
创建letters数姐,并赋值--a,b,c
创建numbersAndLetters,并从Letters数组复制所有元素到numbers数组
创建lettersAndNumbers,并从numbers数组复制所有元素到Letters数组
复制内容到剪贴板代码:
var numbers:Array = new Array(1, 2, 3);
var letters:Array = new Array("a", "b", "c");
var numbersAndLetters:Array = numbers.concat(letters);
var lettersAndNumbers:Array = letters.concat(numbers);
trace(numbers); // 1,2,3
trace(letters); // a,b,c
trace(numbersAndLetters); // 1,2,3,a,b,c
trace(lettersAndNumbers); // a,b,c,1,2,3
4.every() 方法[as3.0新增]
检测是否数组所有元素都满足 callback 函数方法指定的条件。
as3.0语法:function every(callback:Function, thisObject:* = null):Boolean
参数:
callback:Function --检测函数
thisObject:* (default = null) --判断条件
返回:布尔值
实例:
创建数组arr1和数组arr2并调检测用函数isNumeric
复制内容到剪贴板代码:
isNumeric函数--检测是否全部为Number
import flash.display.Sprite;
public class Array_every extends Sprite {
public function Array_every() {
var arr1:Array = new Array(1, 2, 4);
var res1:Boolean = arr1.every(isNumeric);
trace("isNumeric:", res1); // true
15 回复:Flash AS3.0 数组应用[学习笔记]
var arr2:Array = new Array(1, 2, "ham");
var res2:Boolean = arr2.every(isNumeric);
trace("isNumeric:", res2); // false
}
private function isNumeric(element:*, index:int, arr:Array):Boolean {
return (element is Number);
}
}
}
4.filter 方法[as3.0新增]
as3.0语法:filter(callback:Function, thisObject:* = null):Array
根据 callback 方法指定的条件过滤数组,返回由符合条件的元素组成的新数组
参数:
callback:Function--检测函数
function callback(item:*, index:int, array:Array):void;
thisObject:* = null--判定条件
返回:数组
实例:
创建employees数组,并调用push函数添加元素(二维),使用
创建managers
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_filter extends Sprite {
public function Array_filter() {
var employees:Array = new Array();//创建employees数组
employees.push({name:"Employee 1", manager:false});//调用push函数添加二维元素
employees.push({name:"Employee 2", manager:true});
employees.push({name:"Employee 3", manager:false});
trace("Employees:");
employees.forEach(traceEmployee);//调用执行函数traceEmployee(?forEach是啥?看下面)
var managers:Array = employees.filter(isManager);//调用挑选函数isManager
trace("Managers:");
managers.forEach(traceEmployee);//调用执行函数traceEmployee
}
private function isManager(element:*, index:int, arr:Array):Boolean {
16 回复:Flash AS3.0 数组应用[学习笔记]
return (element.manager == true);//返回判断布尔值
}
private function traceEmployee(element:*, index:int, arr:Array):void {
trace("\t" + element.name + ((element.manager) ? " (manager)" : ""));//判断manager是否为true,如果是输出空格
}
}
}
5. forEach方法[as3.0新增]
as3.0语法: forEach(callback:Function, thisObject:* = null):void
数组的每一个元素执行 callback 方法,不返回任何值
第二个参数 thisObject 是第一个参数 callback 的执行范围,即方法内部的 this ,一般不需指定callback 的参数也都是一样的
参数:
callback:Function--执行函数
function callback(item:*, index:int, array:Array):void;
thisObject:* = null--执行范围
实例一:
创建employees数组,并调用push函数添加元素[二维]
并执行函数traceEmployee
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_forEach extends Sprite {
public function Array_forEach() {
var employees:Array = new Array();//创建数组
employees.push({name:"Employee 1", manager:false});//调用push添加二维元素
employees.push({name:"Employee 2", manager:true});
employees.push({name:"Employee 3", manager:false});
trace(employees);//输出数组
employees.forEach(traceEmployee);//调用执行函数traceEmployee
}
private function traceEmployee(element:*, index:int, arr:Array):void {
trace(element.name + " (" + element.manager + ")");//输出:name (manager)
}
}
}
实例二:
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
17 回复:Flash AS3.0 数组应用[学习笔记]
public class Array_forEach_2 extends Sprite {
public function Array_forEach_2() {
var employeeXML:XML = <employees>
<employee name="Steven" manager="false" />
<employee name="Bruce" manager="true" />
<employee name="Rob" manager="false" />
</employees>;
var employeesList:XMLList = employeeXML.employee;//读取节点
var employeesArray:Array = new Array();//创建employeesArray数组
for each (var tempXML:XML in employeesList) {
employeesArray.push(tempXML);//调用push函数添加元素
}
employeesArray.sortOn("@name");//?sorton是啥,看下文
employeesArray.forEach(traceEmployee);//调用执行函数traceEmployee
}
private function traceEmployee(element:*, index:Number, arr:Array):void {
trace(element.@name + ((element.@manager == "true") ? " (manager)" : ""));//判断manager是否为true,为真输出name(manager)为否输出name
}
}
}
6.indexOf 方法 [as3.0新增]
as3.0语法:indexOf(searchElement:*, fromIndex:int = 0):int
查找数组元素,若存在返回元素索引位置,若不存在返回-1
参数:
searchElement:*--查找关键字
fromIndex:int = 0--查找开始索引位置(默认:0)
返回:数值
实例:
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_indexOf extends Sprite {
18 回复:Flash AS3.0 数组应用[学习笔记]
public function Array_indexOf() {
var arr:Array = new Array(123,45,6789);//创建数组arr
arr.push("123-45-6789");//添加数组元素(字符串)
arr.push("987-65-4321");//添加数组元素(字符串)
var index:int = arr.indexOf("123");//查寻字符串"123"
trace(index); // -1
var index2:int = arr.indexOf(123);//查寻123
trace(index2); // 0
var index2:int = arr.indexOf("123-45-6789");//查寻字符串"123-45-6789"
trace(index2); // 0
}
}
}
7.join 方法
join(sep:*):String
将数组中的元素转换为字符串、在元素间插入指定的分隔符、连接这些元素然后返回结果字符串
参数:
sep:*--插入分隔符
返回:字符串
实例一:
复制内容到剪贴板代码:
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
实例二:
复制内容到剪贴板代码:
var phoneString:String = "(888) 867-5309";
var specialChars:Array = new Array("(", ")", "-", " ");
var myStr:String = phoneString;
var ln:uint = specialChars.length;//定义数组specialChars长度
for(var i:uint; i < ln; i++) {
myStr = myStr.split(specialChars[i]).join("");//分割字符串phoneString并重建数组,再调用join重组字符口串
}
var phoneNumber:Number = new Number(myStr);
trace(phoneString); // (888) 867-5309
trace(phoneNumber); // 8888675309
8. lastIndexOf 方法 [as3.0新增函数]
as3.0语法:lastIndexOf(searchElement:*, fromIndex:int = 0x7fffffff):int
19 回复:Flash AS3.0 数组应用[学习笔记]
从最后一个索引位置向前查寻数组元素,若存在返回元素索引位置,若不存在返回-1
参数:
searchElement:*--查寻关键字
fromIndex:int = 0x7fffffff--索引开始位置(默认:0x7fffffff)
返回:数值
实例:
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_lastIndexOf extends Sprite {
public function Array_lastIndexOf() {
var arr:Array = new Array(123,45,6789,123,984,323,123,32);
var index:int = arr.indexOf(123);
trace(index); // 0
var index2:int = arr.lastIndexOf(123);
trace(index2); // 6
}
}
}
9.map() 方法 [as3.0新增函数]
as3.0语法:map(callback:Function, thisObject:* = null):Array
数组的每一个元素执行 callback 方法,返回新数组
参数:
callback:Function--执行函数
function callback(item:*, index:int, array:Array):void;
thisObject:* = null--执行范围
返回:数组
实例:
复制内容到剪贴板代码:
package {
import flash.display.Sprite;
public class Array_map extends Sprite {
public function Array_map() {
var arr:Array = new Array("one", "two", "Three");
trace(arr); // one,two,Three
var upperArr:Array = arr.map(toUpper);//创建upperArr数组并调用执行toUpper函数
trace(upperArr); // ONE,TWO,THREE
}
private function toUpper(element:*, index:int, arr:Array):String {
return String(element).toUpperCase();//小写转大字
}
}
}