如何在javascript中使用复杂的关联数组?

如何在javascript中使用复杂的关联数组?,javascript,arrays,dictionary,associative,Javascript,Arrays,Dictionary,Associative,我的程序中需要这个表,我甚至不确定是否应该使用关联数组 给定类型(数字/字母数字)、字符数和EC(纠错)级别,我需要一个函数返回版本(第一列)。首先,JavaScript有“数组”和“对象”。我假设“关联数组”是指JavaScript对象,使用非负整数以外的键 您可以使用以下语法创建JavaScript对象文字: var versions = { "1" : { rowcols : [21,21], charsByECLevel : { L : {

我的程序中需要这个表,我甚至不确定是否应该使用关联数组

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

首先,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

@我很高兴见到你。请务必看到我放在底部的最新答案。