在JScript中遍历负数组索引
时间:2020-03-06 14:49:42 来源:igfitidea点击:
我在Jscript中有一个稀疏数组,在负数和正数索引处都出现非null元素。当我尝试使用for in循环时,它不会从最低(负)索引到最高正索引遍历数组。而是按我添加元素的顺序返回数组。枚举也不起作用。有什么方法可以让我做到这一点?
例子
arrName = new Array(); arrName[-10] = "A"; arrName[20] = "B"; arrName[10] = "C";
循环时,应该给我A然后给CB。
解决方案
从技术上讲," 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和Object之间的边界。数组元素的访问顺序为0到4294967294之间的整数(最大无符号32位整数1)(包括首尾)。对象属性按名称访问。由于-10不是有效的序数,因此将其解释为名称。这是一个更简单的示例:
var arr = new Array(); arr[0] = 'A'; arr[1] = 'B'; arr[-1] = 'C'; arr.length
结果是2,数组中只有两个元素,分别在索引0和1处。