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

Mr *_*rcs 2 javascript arrays dictionary associative

我在程序中需要这个表http://code.google.com/apis/chart/docs/gallery/qr_codes.html#details,我甚至不确定是否可以使用关联数组.

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

Phr*_*ogz 8

首先,JavaScript有"数组"和"对象".通过'associative array',我假设你的意思是一个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
      }
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

然后,您将访问属性,如下所示:

console.log( versions[1].charsByECLevel.L.digits );
// 41
Run Code Online (Sandbox Code Playgroud)

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

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"
Run Code Online (Sandbox Code Playgroud)

编辑:写完上面的,如果你想要查找基于水平和数字版本,你应该扭转哈希值.而不是循环并检查版本,直接索引它们并在恒定时间内查找:

var versionByLevelAndDigits = {
  L : {
     41 : 1,
     77 : 2,
    127 : 3
  },
  M : {
     34 : 1,
     63 : 2,
    101 : 3
  }
};

var version = versionByLevelAndDigits["L"][77];
// 2
Run Code Online (Sandbox Code Playgroud)