1

这与最小/最大值无关!

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

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

有没有一种简单的方法来获取最小索引?

4

2 回答 2

2

不,没有简单的方法来获得否定键的最小索引。您必须遍历所有键,将它们转换为数字,然后得到最低值。

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

forEach方法循环遍历数组中的项目,因此它只会访问正索引。您使用负索引添加的数据不是数组项,它们是数组对象的属性。因此,该forEach方法从索引 0 开始并不是错误。

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

for (i in a) {
  // Here i is the key, and a[i] is the value
}
于 2013-09-22T14:27:42.903 回答
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);

  }
}
于 2013-09-22T14:29:50.090 回答