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 に答える