【问题标题】:Traversing negative Array indeces in JScript遍历 JAVAScript 中的负数组索引
【发布时间】:2010-09-13 17:39:18
【问题描述】:

我在 Jscript 中有一个稀疏数组,非空元素出现在负索引和正索引处。当我尝试使用 for in 循环时,它不会将数组从最低(负)索引遍历到最高正索引。相反,它按照我添加元素的顺序返回数组。枚举也不起作用。有什么方法可以让我这样做吗?

示例

arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";

循环时,它应该给我 A 然后 C 给我 B。

【问题讨论】:

    标签: javascript arrays sparse-matrix


    【解决方案1】:

    您遇到了 Javascript 中 Arrays 和 Objects 之间的界限。数组元素按序号访问,序号是 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。

    【讨论】:

      【解决方案2】:

      从技术上讲,“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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-10
        • 2016-09-25
        • 2022-06-30
        • 1970-01-01
        • 2017-09-17
        • 1970-01-01
        • 2012-01-07
        • 2013-06-11
        相关资源
        最近更新 更多