2013-09-22 26 views
1

这不是最小/最大值!AS-3 - 如何获得阵列的最小/最大INDEX

我使用Array与各种指数如0, 1, 2, 1000, -1, -100。是的,否定指数(我喜欢这个功能,我很感激它。)。问题是我需要他们否定,否则我将不得不移动所有项目。现在我想知道如何检索最小指数,如-100。最小和最大指数之间的大多数元素将是undefined

var a: Array = new Array(); 
a[-100] = "hello"; 
a.forEach(...); // starts with 0 

有没有简单的方法来获得最小指数?

回答

2

不,没有简单的方法来获得负数键的最小索引。你将不得不循环所有的键,将它们转换为数字,并获得最低。

原因是您正在将数组用作数组和对象。该数组只包含具有正指数的项目,当您使用负指数向其分配任何内容时,它将作为属性添加到数组对象中,而不是作为数组中的项目添加。

forEach方法遍历数组中的项目,因此它只会访问积极索引。您使用负向索引添加的数据不是数组项,它们是数组对象的属性。因此,forEach方法从索引0开始并不是一个bug。

如果要循环存储在数组中的所有内容,可以遍历其属性,然后您将同时获得对象属性和数组物品:

for (i in a) { 
    // Here i is the key, and a[i] is the value 
} 
+0

好吧,您给我带来了坏消息和好消息。我还没有使用过Object的所有优点。现在是时候这样做了。 – n4pgamer

1

的确,您可以在AS3数组中有负指数。这个问题(而且非常严重)是Array方法都不能识别负指数 - 它们只能识别整数。

例如:

var my_array:Array = new Array(); 

var my_array[-100] = "hello"; 

trace(my_array[-100]) // hello 
trace(my_array.length) // 0 
trace(my_array) // [empty] 

通过数组所以标准迭代只能使用到该索引绝对引用来完成。或者在循环时将数组视为对象:

var lowest:int = -100000 /* some deep number */ 

for(var i in a){ 

    if(int(i) < lowest){ 

    lowest = int(i); 

    } 
} 
相关问题