`

flex数据基础 array和arraycollection

    博客分类:
  • flex
阅读更多

Flex数据基础-Array与ArrayCollection
2010-12-16 12:34

通常Flex与外部数据传递时采用XML/XMLList的方式,而内部数据传输大多采用Array或ArrayCollection的方式。

常用的Array类型通常是:一维数组、二维数组和联合数组等。

ArrayCollection是对Array的包装。包装之后,数据会具有更丰富的数据处理能里。我转的教程说的挺详细,可以看看。

通常的做法是先定义Array,然后将其包装成ArrayCollection。

一、定义Array

1、用AS定义

var arr:Array = new Array("宝马","奔驰","奥迪","面包");

var arr2:Array = ["宝马","奔驰","奥迪","面包"];

var arr3:Array = new Array(

{name:"宝马",type:"汽车"},

{name:"奔驰",type:"汽车"},

{name:"奥迪",type:"汽车"},

{name:"面包",type:"食物"}

);

2、用标签定义

<mx:Array id="arr">

<mx:String>宝马</mx:String>

<mx:String>奔驰</mx:String>

<mx:String>奥迪</mx:String>

<mx:String>面包</mx:String>

</mx:Array>

2、定义ArrayCollection

现定义Array再包装

var arr:Array = new Array(

 

{name:"宝马",type:"汽车"},

{name:"奔驰",type:"汽车"},

{name:"奥迪",type:"汽车"},

{name:"面包",type:"食物"}

 

);

var arrc:ArrayCollection = new ArrayCollection(arr);

或者直接定义:

var arrc:ArrayCollection = new ArrayCollection([

 

{name:"宝马",type:"汽车"},

{name:"奔驰",type:"汽车"},

{name:"奥迪",type:"汽车"},

{name:"面包",type:"食物"}

3、添加/移除ArrayCollection项

1)添加项  ac.addItemAt({name:"奔驰",type:"汽车"},0);  注意是两个参数,不然会报错

 

2)移除项  ac.removeItemAt(0);  注意索引值如果大于ac中的项目,后面的语句不会执行。

3)同时移除多项 

var toRemove:Array = [];

for(var i:int=0; i<tlist0.selectedItems.length;i++)

toRemove.push(tlist0.selectedItems[i]);

for(i=0;i<toRemove.length;i++)

myDP.removeItemAt(myDP.getItemIndex(toRemove[i]));

4)检测ArrayCollecction是否存在某对象

要检查ArrayCollection中是否存在复杂对象,需要比较两个对象的值,例如:

private function checkItem():int

{

var i:int;

var arr:Array = AC.source;

while()

{

if(arr[i].name==nameTI.text && arr[i].age==ageTI.text)

{

return i;

}

i++;

}

return -1;

}

不能用

AC.contains({name:nameTI.text,age:Number(ageTI.text)})

AC.getItemIndex({name:nameTI.text,age:Number(ageTI.text)})

因为contains和getItemIndex方法都是比较对象的指针,而不是他们的值。

这里要解释下:

private var arr:Array= new Array(

{name:"奔驰",type:"汽车"},

{name:"宝马",type:"汽车"},

{name:"大象",type:"动物"},

{name:"小高",type:"同学"}

);

private var ac:ArrayCollection = new ArrayCollection(arr);

protected function chk():void

{

label1.text = ac.contains({name:"小高",type:"同学"}).toString();

}

这里显示的是false;为什么?上面也说了,因为contains和getItemIndex都是比较对象的指针,而不是值,再来举个例子:

private var obj:Object = {name:“打印机”,type:"办公电器"};

private var arr:Array = new Array(

{name:"奔驰",type:"汽车"},

{name:"宝马",type:"汽车"},

{name:"大象",type:"动物"},

{name:"小高",type:"同学"},

obj

);

 

protected function chk():void

{

label1.text = ac.contains(obj).toString();

}

这里就会显示true了,也就是说虽然内容一样,但是在内存中的位置不同,那比较出来的就是false

5)监听ArrayCollection数据是否被修改

private var coll:ArrayCollection = new ArrayCollection();

coll.addEventListener(CollectionEvent.COLLECTION_CHANGE,collChangeHandler);

6)遍历ArrayCollection数据

for(var i:int=0; i<ac.length;i++)

{

trace(ac.getItemAt(i).name);

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics