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 并显示相应的值之一。

例如,用户选择“男性”和“3 岁”。数组每一行的第一个值是年龄。我有兴趣找到的值位于行数组中的第三个位置。所以在这种情况下,我想找到“44”。

我想如果有钥匙我可以建造它,但我很难根据位置来匹配。

编辑:

让我解释得更好一点。用户在表单中输入两个变量,第一个是性别。第二个是,假设年龄,与第一列相对应。我想显示一个我已经知道与第三列相对应的值(在这种情况下,假设它是“预期的 BMI”)。因此,如果用户选择“男性”和“3 岁”,我想显示 44 的预期 BMI。

再比如,如果用户选择“女性”和“7 岁”,它应该输出 11。

4

3 回答 3

2

像这样的东西对你有用吗?

var gender = 'male';
var age = 3;

var resultNumber = jsonData[0][gender].filter(function(i) {
  if (i[0] == age) {
    return true;
  }
})[0][2];

在这种情况下resultNumber将是 44。

如果这不是你想要的,请告诉我。

于 2013-08-14T20:02:47.347 回答
1

这很容易。记住二维数组的用法,好吧,我们将使用它们。

代码将如下所示:

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 回答
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 回答