加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex数据基础 array和arraycollection

发布时间:2020-12-15 05:07:31 所属栏目:百科 来源:网络整理
导读:Flex数据基础-Array与ArrayCollection 2010-12-16 12:34 通常Flex与外部数据传递时采用XML/XMLList的方式,而内部数据传输大多采用Array或ArrayCollection的方式。 常用的Array类型通常是:一维数组、二维数组和联合数组等。 ArrayCollection是对Array的包装

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:"奔驰",

{name:"奥迪",

{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:"食物"}

?

);

var arrc:ArrayCollection = new ArrayCollection(arr);

或者直接定义:

var arrc:ArrayCollection = new ArrayCollection([

?

{name:"宝马",type:"食物"}

3、添加/移除ArrayCollection项

1)添加项 ?ac.addItemAt({name:"奔驰",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:"奔驰",

{name:"宝马",

{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:"同学"},

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);

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读