2013-09-29 32 views
0

有一些问题需要JavaScript。访问数据中的值

我有一个数据结构。有些事情是这样的:

var Data = 
{ 
    head: ["ID", "Name", "Age"], 
    rows: [ 
      ["0", "Bob", "23"], 
      ["1", "Sam", "24"], 
      ["2", "Tom", "25"] 
      // and so on 
      ] 
} 

我有一个函数来处理这些数据。该函数必须处理for..in语句中的rows-field。

$scope.someDate = $filter('filter')($scope.data.rows, function (item) { 
    for(var val in item) { 
    // some logic... 
    } 
    // some logic... 
}); 

并且问题如下。在FOR循环中,不是给我3个属性(根据数据格式),它给了我4个。第四个属性是散列键。因为这个,我有问题。 有谁知道如何解决,修改或绕过这个?

+0

请注意,该问题有**没有**与JSON的所有。看起来你正在将JavaScript对象文字(JavaScript语言语法的构造)与JSON(独立于语言的数据交换格式,如XML或CSV)混淆。我会相应地编辑你的问题。另请参阅:[没有像“JSON对象”那样的东西](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。 –

+0

看起来'item'是一个数组。不要使用'for ... in'来迭代数组,而是使用'for'循环。 –

+0

是的,它适用于简单的循环。但我仍然想知道如何避免使用for-in语句的额外参数... –

回答

1

就你而言,rows是一个数组数组。行的每个元素(这是一个数组)将被传递给item。现在,item是一个数组。根据这个例子,

var Data = 
{ 
    head: ["ID", "Name", "Age"], 
    rows: [ 
      ["0", "Bob", "23"], 
      ["1", "Sam", "24"], 
      ["2", "Tom", "25"] 
      // and so on 
      ] 
}; 

Data.rows.forEach(function(item) { 
    console.log(item); 
}) 

将打印

[ '0', 'Bob', '23' ] 
[ '1', 'Sam', '24' ] 
[ '2', 'Tom', '25' ] 

现在,如果我们有这个item阵列的每一个元素过程中,我们通过它进行迭代。

Data.rows.forEach(function(item) { 
    for (var i = 0, len = item.length; i < len; i += 1) { 
     console.log(item[i]); 
    } 
}) 

现在,这将打印

0 
Bob 
23 
1 
Sam 
24 
2 
Tom 
25 

注:不使用for..in来遍历数组。请阅读这个答案的详细解释https://stackoverflow.com/a/500531/1903116

+0

谢谢,现在它非常清楚。 –

+0

@RomanDryndik欢迎您:) – thefourtheye