0

我有一个数组集合,我在其中添加了不同的模型值,如下所示。

var ob:Object=new Object();
ob.name=string1;
ob.data=model.arraylist1;
ob.id=model.arraylist2;
nextArrayCollection.addItem(ob);

//model.arraylist1 value is changed here
//model.arraylist2 value is changed here

ob=new Object();
ob.name=string1;
ob.data=model.arraylist1;
ob.id=model.arraylist2;
nextArrayCollection.addItem(ob);

问题是,当第二项添加到 nextArrayCollection 时,arraycollection 中第一项的值也会更改为与添加的第二项相同。

我对这里发生的事情感到非常困惑。每次我将新项目添加到 nextArrayCollection 时,所有现有项目的值都会更改为添加的新项目的值。是使用参考而不是值的数组集合。我该如何克服这个问题?

4

1 回答 1

1

我相信这只是对 OOP 的误解,它使用了引用对象:

即使您添加了两个新对象(ob = new object()),您也将它们都指向您的模型属性,但在分配时不会复制它,而只会被引用。

一个简单的测试是简单地克隆集合:

ob=new Object();
ob.name=string1;
ob.data= objectUtil.clone(model.arraylist1);
ob.id=model.arraylist2;
nextArrayCollection.addItem(ob);

虽然这不是您的数据结构的理想范例/模型,但我认为解决方案是对数据进行排序,而不是将数据设置为 model.arraylist1 和 model.arraylist2。

于 2012-11-21T08:53:35.943 回答