2

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

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

4

1 回答 1

8

首先,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
于 2010-12-21T04:29:21.793 回答