未指定键时查找特定的JSON数组值

时间:2013-08-14 19:37:10

标签: jquery arrays json

我正在访问一个如下所示的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岁”。数组每行的第一个值是age。我感兴趣的值是在行数组中的第3个位置。所以在这种情况下,我想找到“44”。

我认为如果有钥匙我可以建立这个,但我很难根据位置来匹配。

编辑:

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

另一个例子,如果用户选择“女性”和“7岁”,则应输出11。

3 个答案:

答案 0 :(得分: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。

如果你想要的话,请告诉我。

答案 1 :(得分:1)

这很容易。记住2D阵列的使用,好吧,我们将使用它们。

代码如下所示:

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/

答案 2 :(得分:1)

如果那个3意味着我的想法(选择性别下的行中第一个元素的值),你就忘了提到另外3个值变量意义列索引。那么这可以解决你的大部分问题:

jsfiddle available

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));