0

次のような JSON 配列にアクセスしています。

{"female":[
  [1,17,99,22],
  [3,24,13,26],
  [7,54,11,27]
],"male":[
  [1,18,75,33],
  [3,15,44,47],
  [7,27,86,55]
]}

フロントエンドで、ユーザーは性別と、配列文字列の最初の値に対応する値を選択します。これらの入力に基づいて、JSON を確認し、対応する値の 1 つを表示します。

たとえば、ユーザーは「男性」と「3 歳」を選択します。配列の各行の最初の値は age です。私が見つけたいと思っている値は、行配列の 3 番目の位置にあります。この場合、「44」を見つけたいと思います。

キーがあればこれを構築できると思いますが、位置だけに基づいて一致させる方法に困惑しています。

編集:

もう少しうまく説明しましょう。ユーザーはフォームに 2 つの変数を入力します。1 つ目は性別です。2 番目は、最初の列に対応する年齢としましょう。3 番目の列に対応することが既にわかっている値を表示したい (この場合、「予想される BMI」としましょう)。したがって、ユーザーが「男性」と「3 歳」を選択した場合、予想 BMI 44 を表示したいと考えています。

別の例として、ユーザーが「女性」と「7 歳」を選択した場合、11 が出力されます。

4

3 に答える 3

1

その 3 が私が考えていること (選択する性別の下の行の最初の要素の値) を意味し、列インデックスを意味する他の 3 つの値の変数について言及するのを忘れた場合。次に、これでほとんどの問題が解決する場合があります。

利用可能なjsfiddle

function getSomeNumberByGenderAndAgeAtColumn(gender, age, col) {
    // get the real data by some means?
    var vals = {"female":[
      [1,17,99,22],
      [3,24,13,26],
      [7,54,11,27]
    ],"male":[
      [1,18,75,33],
      [3,15,44,47],
      [7,27,86,55]
    ]};

    // small private helper
    var findRowByAge = 
        function(arr, age) {
            var line = null;
            for(var i = 0; i < arr.length; i ++) {
                if (arr[i][0] == age) {
                    line = arr[i];
                    break;
                }
            }
            return line;
        }
    var line = findRowByAge(vals[gender], age);
    return line != null ? line[col-1] : 'N.A.';
}

// should be 44
$('#result').text(getSomeNumberByGenderAndAgeAtColumn('male', 3, 3));
于 2013-08-14T20:24:40.637 に答える
1

これは非常に簡単です。2 次元配列の使用法を思い出してください。それを使用します。

コードは次のようになります。

var json = [
{
"male" : [
  [1,18,75,33],
  [3,15,44,47],
  [7,27,86,55]
]
}];

for (var key in json) {
if (json.hasOwnProperty(key)) {
  if(json[key].male[1][0] == 3)
        alert("Result is ::"+json[key].male[1][2])
}
}

このフィドルを実行して、有効なソリューションを見つけます: http://jsfiddle.net/Jpd9W/

于 2013-08-14T20:10:45.510 に答える