我正在访问一个如下所示的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。
答案 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个值变量意义列索引。那么这可以解决你的大部分问题:
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));