2013-09-29 43 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