迭代数据以获得价值

时间:2014-01-14 00:19:23

标签: javascript jquery

我有以下循环

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)

希望获得“西北”和“西南”的价值观        我在控制台中得到“未定义”。

3 个答案:

答案 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的属性,因此当然valueundefined。尝试:

console.log(data[i].MainArea)