我有以下循环
for (var i in data) {
console.log(data[i])
}
我循环迭代的数据是
"data": [
{
"MainArea": "North West"
},
{
"MainArea": "South West"
},
当我运行它时,我在firebug中得到以下输出
[Object { MainArea="North West"},
Object { MainArea="South West"}]
我想要得到的只是它的价值。所以,当我尝试
时console.log(data[i].MainArea)
希望获得“西北”和“西南”的价值观 我在控制台中得到“未定义”。
答案 0 :(得分:5)
请尝试以下操作:
console.log(data[i].MainArea);
您正试图从对象属性中获取信息。由于您的变量包含在json格式列表中,因此您可以通过命名属性访问变量。
更新:根据您对原始问题的补充,我创建了 DEMO 。
var myObj = {"data": [
{
"MainArea": "North West"
},
{
"MainArea": "South West"
},
],
},
data = myObj['data'],
data_length=data.length;
for (var i= 0; i < data_length; i++)
{
console.log(data[i].MainArea);
}
请记住,在迭代键值对时,应使用for ... in
循环,而在迭代数组时,应使用for
循环。例如,如果您的data
属性包含已排序的数组,则for ... in
循环将无法保证从数组项0
循环到N
。这意味着它不会遵循顺序。因此,对于非数组对象,仅使用for
个循环,对for ... in
使用{{1}}。请阅读here中的相关内容。可以看到一些jsPerf比较here。
答案 1 :(得分:2)
问题是你正在迭代的数据对象有另一个叫做data的属性,它是一个包含目标对象的数组,当然你需要使用的属性键是MainArea
所以试试
var data = {
"data": [{
"MainArea": "North West"
}, {
"MainArea": "South West"
}]
}
for (var i in data.data) {
console.log(data.data[i].MainArea)
}
演示:Fiddle
答案 2 :(得分:1)
对象定义如下:
{ MainArea="North West" }
因此它只有一个名为MainArea
的属性。没有名为value
的属性,因此当然value
为undefined
。尝试:
console.log(data[i].MainArea)