我在 Jscript 中有一个稀疏数组,非空元素出现在负索引和正索引处。当我尝试使用 for in 循环时,它不会将数组从最低(负)索引遍历到最高正索引。相反,它按照我添加元素的顺序返回数组。枚举也不起作用。有什么方法可以让我这样做吗?
例子
arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";
循环时,它应该给我 A 然后 C 给 B。
我在 Jscript 中有一个稀疏数组,非空元素出现在负索引和正索引处。当我尝试使用 for in 循环时,它不会将数组从最低(负)索引遍历到最高正索引。相反,它按照我添加元素的顺序返回数组。枚举也不起作用。有什么方法可以让我这样做吗?
例子
arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";
循环时,它应该给我 A 然后 C 给 B。
从技术上讲,“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>
您遇到了Javascript 中Array
s 和s 之间的界限。Object
数组元素按序号访问,序号是 0 到 4294967294 之间的整数(最大无符号 32 位整数 - 1),包括 0 和 4294967294。对象属性按名称访问。由于 -10 不是一个有效的序数,它被解释为一个名称。这是一个更简单的例子:
var arr = new Array();
arr[0] = 'A';
arr[1] = 'B';
arr[-1] = 'C';
arr.length
结果为 2 - 数组中只有两个元素,索引为 0 和 1。