在JScript中遍历负数数组索引

3
我有一个Jscript的稀疏数组,其中非空元素出现在负数和正数索引位置。当我尝试使用for in循环时,它不会按照最低(负)索引到最高正索引的顺序遍历数组。相反,它按照我添加元素的顺序返回数组。枚举也行不通。有没有一种方法让我做到这一点? 示例
arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";

当循环时,它应该给我A,然后是C,最后是B。
2个回答

9

技术上讲,"A"实际上不在数组中,因为你不能有一个负数索引。它只是arrName对象的一个成员。如果你检查arrName.length,你会发现它是21(0,1,2,...,20)。为什么不使用普通对象代替(作为哈希表)?像这样的东西应该可以工作:

<script type="text/javascript">
//define and initialize your object/hastable
var obj = {};
obj[20] = 'C';
obj[10] = 'B';
obj[-10] = 'A';

// get the indexes and sort them
var indexes = [];
for(var i in obj){
    indexes.push(i);
}
indexes.sort(function(a,b){
    return a-b;
});

// write the values to the page in index order (increasing)
for(var i=0,l=indexes.length; i<l; i++){
    document.write(obj[indexes[i]] + ' ');
}
// Should print out as "A B C" to the page
</script>

4
您正在遇到JavaScript中ArrayObject之间的边界。数组元素是按顺序访问的,顺序是介于0和4294967294(最大无符号32位整数-1)之间的整数。对象属性是通过名称访问的。由于-10不是有效的顺序号码,因此它被解释为名称。以下是一个更简单的例子:
var arr = new Array();
arr[0] = 'A';
arr[1] = 'B';
arr[-1] = 'C';
arr.length

结果是2 - 数组中只有两个元素,它们的索引为0和1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接