我会鼓励你使用ArrayUtil作为as3core库的一部分。该文件只有5kb,并且只包含一些功能,因此非常轻便。如果你导入它,Flash足够聪明,只包含它所需的文件,所以它不会从整个as3core库中引入所有的代码。
在另一方面,如果你真的想创造你自己的,这样做:
var a1:Array = ["a", "b", "c"];
var a2:Array = ["b", "j", "e"];
var a3:Array = a1.concat(a2);
a3 = uniqueArray(a3);
trace(a3); // a,b,c,j,e
function uniqueArray(a:Array):Array {
var newA:Array = [];
for (var i:int = 0; i < a.length; i++) {
if(newA.indexOf(a[i]) === -1) newA.push(a[i]);
}
return newA;
}
编辑(问题是在评论澄清)
如果你正在使用关联数组, Adobe建议使用对象,而非数组用于关联数组。见http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html
的Adobe不要使用Array类创建关联数组(也称为哈希),它们是包含命名元素而不是编号元素的数据结构。要创建关联数组,请使用Object类。尽管ActionScript允许您使用Array类创建关联数组,但不能将任何Array类方法或属性与关联数组一起使用。
因此,解决这样的问题:
var a1:Object = {};
var a2:Object = {};
a1["a"] = "the a";
a1["b"] = "the b";
a2["b"] = "the b2";
a2["c"] = "the c";
var a3:Object = uniqueArray(a1, a2);
for each(var i:* in a3) {
trace(i);
}
// outputs [the a, the b, the c]
// 'the b2' is omitted because 'b' key already exists
function uniqueArray(a1:Object, a2:Object):Object {
var newA:Object = {};
for(var i:String in a1) {
newA[i] = a1[i];
}
for(var j:String in a2) {
if(newA[j] === undefined) newA[j] = a2[j];
}
return newA;
}
我很抱歉,但我感到困惑的问题,你想知道如何实现图书馆或做createuniqueCopy不使用的as3corelib ? – Saad 2011-03-26 07:24:11
@ Saad,我想知道如何在不使用as3corelib的情况下实现createuniqueCopy。 – 2011-03-26 07:34:24