AS3 - 使用Object查找数组中的值

时间:2014-05-08 00:23:22

标签: arrays actionscript-3 comparison

所以我无法弄清楚如何比较两个数组的差异,并能够找到彼此不存在的元素。大多数示例都讨论了对象查找,以便与“for each in”循环一起使用。这很有道理,但我不知道这里发生了什么:

var item:Sprite;    
object_lookup[item] = true;

我很困惑,因为我从未见过[]内部的整数,例如数组。

1 个答案:

答案 0 :(得分:1)

Object是动态的,这意味着您可以在运行时为其分配属性:

var o:Object = {};

o.sayHi = "Hi, it's me";
trace(o.sayHi); //traces: Hi, it's me

o.sayHiWithFunction = function () { return "Hi with function" };
trace(o.sayHiWithFunction()); //traces: Hi with function

如果要分配的属性不是有效标识符,则必须使用[]并将其作为字符串放置,例如:

var o:Object = {};
o.this = "Yes, it is this!"; // Error, this is a keyword! Won't compile
o["this"] = "And the correct this!"; //And this one works!
o["more words"] = "More words"; //Works too

您的代码令人困惑。如果object_lookupObject实例,则您在其上创建了一个名为null的属性,但您将此属性设置为true。这意味着它与您在其上方声明的Sprite 完全无关。当然,这是null,因为你没有为它分配一个sprite对象,这就是为什么属性名被评估为null。这里不要混淆:属性名称“null”只是一个字符串,它与类型null无关。 现在,for in循环遍历Object的所有属性名称,如果您知道属性名称,您实际上也可以查找值。看起来像这样:

var o:Object = {a:"A", b:"B", c:"C"}; // This is equivalent to o.a = "A", o.b = "B", o.c = "C"... which is aquivalent to o["a"] = "A" ;)
for(var i in o) {
    trace(i, o[i]) //traces: c C, a A, b B
}

for each in略有不同,如果您追踪i,您将看到值,而不是for in循环的属性名称。 否则,请在评论中按照Vesper的建议,阅读Dictionary