2013-09-22 27 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); 

    } 
} 
相關問題