【问题标题】:How to use a complex associative array in javascript?如何在javascript中使用复杂的关联数组?
【发布时间】:2010-12-21 04:13:32
【问题描述】:

我的程序中需要这张表http://code.google.com/apis/chart/docs/gallery/qr_codes.html#details,我什至不确定关联数组是否适合。

鉴于类型(数字/字母数字)、字符数和 EC(纠错)级别,我想要一个函数来返回版本(第一列)。

【问题讨论】:

    标签: javascript arrays dictionary associative


    【解决方案1】:

    首先,JavaScript 有“数组”和“对象”。通过“关联数组”,我假设您的意思是一个 JavaScript 对象,使用非负整数以外的键。

    您可以使用如下语法创建 JavaScript 对象字面量:

    var versions = {
      "1" : {
        rowcols : [21,21],
        charsByECLevel : {
          L : {
            digits:41,
            alpha:25
          },
          M : {
            digits:34,
            alpha:20
          }
        }
      },
      "2" : {
        rowcols : [25,25],
        charsByECLevel : {
          L : {
            digits:77,
            alpha:47
          },
          M : {
            digits:63,
            alpha:48
          }
        }
      }
    };
    

    然后您可以像这样访问属性:

    console.log( versions[1].charsByECLevel.L.digits );
    // 41
    

    要遍历这些值,您可以这样做:

    function findVersion( versions, level, digits ){
      for (var versionNumber in versions){
        if (versions.hasOwnProperty(versionNumber)){
          if (versions[versionNumber].charsByECLevel[level].digits == digits){
            return versionNumber;
          }
        }
      }
    }
    
    findVersion( versions, "L", 77 );
    // returns "2"
    

    编辑:写完上述内容后,如果您想根据级别和数字查找版本,您可能应该反转哈希。与其循环检查版本,不如直接索引它们并在恒定时间内查找:

    var versionByLevelAndDigits = {
      L : {
         41 : 1,
         77 : 2,
        127 : 3
      },
      M : {
         34 : 1,
         63 : 2,
        101 : 3
      }
    };
    
    var version = versionByLevelAndDigits["L"][77];
    // 2
    

    【讨论】:

    • @MrRabLorcs 很高兴。请务必查看我放在底部的更新答案。
    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2012-05-03
    • 2016-06-16
    • 2016-08-04
    • 2017-08-02
    相关资源
    最近更新 更多