如果以关联方式使用,则数组不可迭代

时间:2009-06-26 09:53:27

标签: flex flash actionscript-3 actionscript

嗨我在actionscript中有一个数组

var arr : Array = new Array();
arr["fsad"] = 1;
trace(arr.length);

现在用一个关联字符串为它添加一个条目,然后计算长度我得到的长度为0,但为什么呢?我怎么能现在迭代它?

提前致谢

塞巴斯蒂安

5 个答案:

答案 0 :(得分:2)

你想要完成的事情被称为字典我猜:)

答案 1 :(得分:1)

嗯,引用reference

  

不要使用Array类来创建关联数组(也称为哈希),它们是包含命名元素而不是编号元素的数据结构。要创建关联数组,请使用Object类。尽管ActionScript允许您使用Array类创建关联数组,但您不能将任何Array类方法或属性与关联数组一起使用。

我不确定为什么AS3仍允许以关联方式使用数组 - 也许他们担心AS2迁移 - 但最好避免使用。据我所知,像lengthpop()这样的内置数组灯具只会忽略使用不是整数的键添加的任何内容,但它们的行为也可能无法预测。

答案 2 :(得分:1)

有一篇帖子描述了与你提到的相同的问题

How do I find the length of an associative array in ActionScript 3.0?

我希望它会有所帮助

答案 3 :(得分:0)

使用spidermonkey在JavaScript(它是ActionScript的兄弟)中:

var obj = new Object(); // {}
obj["foo"] = 1;
print(obj.__count__); => 1 // non-standard Gecko

var arr = new Array(); // []
arr.push(1);
print(arr.length); => 1

对数组使用Array,对字典使用Object。它不像PHP那样使用相同的类型完成所有事情。

答案 4 :(得分:0)

您可以使用代理创建自己的关联数组...这会带来高性能成本,但您可以实现覆盖getPropertysetProperty以及for each in的数组访问权限for in分别覆盖nextNameIndex以及nextValuenextName ...您还可以实现数组的forEachfilter,{{1} },mapany等等方法,所以它看起来像是来自外部的真实数组......但是你应该只做那种情况,在这种情况下,性能不重要或不可避免......

格尔茨

back2dos

相关问题