2014-01-14 35 views
0

我有以下循环,我为循环通过是遍历数据中获取价值

"data": [ 
    { 
     "MainArea": "North West" 
    }, 
    { 
     "MainArea": "South West" 
    }, 

迭代

for (var i in data) { 
    console.log(data[i]) 
} 

数据当我运行它,我得到的萤火以下输出

[Object { MainArea="North West"}, 
Object { MainArea="South West"}] 

我想要得到的只是它的价值。所以,当我试图

console.log(data[i].MainArea) 

希望能得到公正的“西北”和西南”的价值观,而不是 我得到‘在我的控制台未定义’

+0

看到下面的答案,你需要通过'data.data' –

回答

2

的问题是数据对象,你是迭代有另一个属性称为数据是包含目标对象的数组,当然你需要使用属性关键是MainArea所以尽量

var data = { 
    "data": [{ 
     "MainArea": "North West" 
    }, { 
     "MainArea": "South West" 
    }] 
} 
for (var i in data.data) { 
    console.log(data.data[i].MainArea) 
} 

演示: Fiddle

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。请阅读here。有些jsPerf比较可见here

+0

我试了一下,我在控制台中看到“未定义” –

+0

好进行迭代。你可以发布你的'数据'对象初始化吗? – Khamidulla

+0

我刚更新了原始数据的代码。我从存储过程中获取这些数据。一切工作正常,我只是不知道如何才得到价值部分,即“西北部”..感谢 –

1

的对象被定义为这样的:

{ MainArea="North West" } 

所以只有一个属性,称为MainArea。有没有财产叫value所以当然valueundefined。尝试:

console.log(data[i].MainArea) 
+1

这是不正确的JS语法。对象属性是'key:value',而不是'key = value'。 – jfriend00

+0

@ jfriend00:有效的点,但这里的语法似乎是他在调试器中看到的只是从问题中复制/粘贴。 – David