我有以这种格式的JSON数据:
{
"head": {
"heading": ["header1", "header2", "header3"]
},
"body": {
"elements": [{
"header1": {
"value": "value1"
},
"header2": {
"value": "value2"
}
"header3": {
"value": "value3"
}
},
{
"header1": {
"value": "value1"
},
"header2": {
"value": "value2"
}
"header3": {
"value": "value3"
}
}
]
}
我无法预测标题中的值数量。所以,我最初解析标题中的值并存储在数组中。稍后打印身体元素。我写了以下代码
// data has the parsed json file
var heading = [];
data.head.heading.forEach(function(head) {
heading.push(head);
});
data.body.elements.forEach( function(elem) {
for (var head in the heading) {
var header = heading[head];
alert(elem.header.value); //not accessing value inside header
}
});
在使用values.header.value
时,它需要访问每个元素的header1
,header2
和header3
内的值,但它会返回错误
TypeError:elem.header未定义
它将值作为标题而不是变量头内的值。有没有办法让它访问变量头内的值?提前谢谢
答案 0 :(得分:1)
您需要使用括号表示法访问该对象,因为header
的值需要用作键,而不是文字词“#header”,例如。
elem[header].value
此外,您的第一个循环完全是多余的,因为您只是复制一个您已有权访问的阵列。试试这个:
data.body.elements.forEach(function(elem) {
for (var head in data.head.heading) {
var header = data.head.heading[head];
console.log(elem[header].value);
}
});
最后,请注意,通过使用另一个嵌套forEach()
调用来迭代data.head.heading
,可以使这更加简洁:
var data = {
"head": {
"heading": ["header1", "header2", "header3"]
},
"body": {
"elements": [{
"header1": { "value": "value1" },
"header2": { "value": "value2" },
"header3": { "value": "value3" }
},
{
"header1": { "value": "value1" },
"header2": { "value": "value2" },
"header3": { "value": "value3" }
}]
}
}
data.body.elements.forEach(function(elem) {
data.head.heading.forEach(function(header) {
console.log(elem[header].value);
});
});