2012-08-14 77 views
0

我有一個對象,其中包含2個名稱參數 - 請參閱下面的示例。我知道要獲得我需要循環訪問的數據,但我覺得這太煩人了。有沒有更簡單的方法獲取數據?如何以簡單的方式從對象中檢索數據?

var obj = {[[[{name:'one'},{name:'two'}]]]}; 

$.each(obj,function(i,val){ 
    var first = [] // i will get first time 
    $.each(first, function(i, val){ 
     var second = [] //i will get second time and third later fourth // like so? 
    }) 
}) 

這是否意味着我應該循環的each功能四次獲得name值?如果是的話,哪個是正確的方法來獲得呢?有什麼方法可以使用相同的函數來獲取數據嗎?

+1

我在實踐中假設你不會有陣列的不必要的嵌套像例? – 2012-08-14 10:33:38

+0

不是這樣,我有一個機會,有2個數組聲明 – 3gwebtrain 2012-08-14 10:34:24

+1

這不是一個有效的對象。最外面的數組是一個沒有鍵的值。 – Dennis 2012-08-14 10:41:06

回答

1

您的obj無效。

所以,試一下這個:

var obj = [[[{ 
     name: 'one'}, 
    { 
     name: 'two'}]]]; 

$.each(obj[0][0], function() { 
    alert(this.name); 
}); 

DEMO


另外一個(對數組的任何級別)

var obj = [[[{ 
    name: 'one'}, 
{ 
    name: 'two'}]]]; 

function getObject(obj) { 
    if (Object.prototype.toString.call(obj[0]) == '[object Array]') { 
     getObject(obj[0]); 
    } else { 
     $.each(obj, function() { 
      alert(this.name); 
     }); 
    } 
} 

getObject(obj);​ 

DEMO


{}總是包含key : value對數據。所以,在你的情況下,{ [ .. ] }是無效格式的對象。對象的一些正確的格式可能是:

{ key1: value1, key2: value2, .. } 

{ data: [{key1: value1}, {key2: value2}] } 

建議

如果你選項,然後改變你的obj像下面的格式:

var obj = [ 
    { name: 'one' }, 
    { name: 'two' } 
]; 

,簡單地嘗試下面的代碼:

$.each(obj, function() { 
    alert(this.name); 
}); 
1

您應該使用遞歸函數進行搜索。你可以通過你的對象與n個表。

var obj = [[[[{name:'one'},{name:'two'}]]]]; 

function troughTables(table){ 
    if(table instanceof Array && table.length == 1){ 
     troughTables(table[0]); 
     return; 
    } 

    console.log("here is a content table"); 
} 

troughTables(obj) 

有了這個,你能有多大的表,但條件是長度必須在1

0

您可以序列化此對象JSON,並與正則表達式獲取數據。

您也可以使用扁平化數組:

jQuery.map(obj, function(n){return n}) 

,你會得到類似結果:

[{name:'one'},{name:'two'}] 
相關問題