2017-04-11 21 views
0

通過查看「Array」圖片,我如何訪問此數組的所有級別?如何訪問多級對象的數組?

我試着做一個foreach,但這隻允許我訪問第一個對象,我不能訪問填充字符串的第二個對象。

for (var key in result) 
    { 
    if (result.hasOwnProperty(key)) 
     { 
      console.log(key, result[key]); 

       for(var item in result[key]) 
       { 
        console.log(item); 
       } 
      } 
} 

我也試過:

result[key[item]] 

但它似乎undifined。

我知道很容易通過名稱訪問所有元素,但名稱不斷變化,所以解決方案應該是動態的。

我在評論中添加了Demo以查看行爲。

+0

DEMO:https://jsfiddle.net/jaelsvd/tkgn1bgt/3/ –

+1

請將相關數據添加到問題中。 –

+0

嗨Jael,歡迎來到StackOverflow。請花一些時間閱讀幫助頁面,尤其是名爲[「我可以詢問什麼主題?」(http://stackoverflow.com/help/on-topic)和[「我應該問什麼類型的問題避免問?「](http://stackoverflow.com/help/dont-ask)。更重要的是,請閱讀[Stack Overflow問題清單](http://meta.stackexchange.com/q/156810/204922)。您可能還想了解[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

回答

0

Object.keys(obj)返回obj中的密鑰數組。根據您的評論

我想你問到應用此解決方案的任意深度的對象

var obj = { 
 
    a: 1, 
 
    b: 2, 
 
    m: 3, 
 
    x: 4, 
 
    y: 5, 
 
    z: 6 
 
} 
 

 
//get all the keys in an array: 
 
var keys = Object.keys(obj) 
 
console.log("keys: " + keys); 
 

 
//iterate through the object by its keys: 
 
for (var i = 0; i < keys.length; i++){ 
 
    console.log("key " + keys[i] + " has value " + obj[keys[i]]); 
 
}

更新。我的解決辦法是換以前的伎倆在功能和遞歸調用它,如果有嵌套的對象:

var obj = { 
 
    a: {foo:"bar",foof:"barf"}, 
 
    b: 2, 
 
    m: 3, 
 
    x: {baz:{really:{more:{objects: "yeah, there could be a lot"}}}}, 
 
    y: 5, 
 
    z: 6 
 
} 
 

 
function getKeysDeep(obj,prefix){ 
 
    //get all the keys in an array: 
 
    var keys = Object.keys(obj) 
 
    //console.log(prefix + "keys: " + keys); 
 

 
    //iterate through the object by its keys: 
 
    for (var i = 0; i < keys.length; i++){ 
 
    if (obj[keys[i]] !== null && typeof obj[keys[i]] === 'object') { 
 
     console.log("key " + keys[i] + "'s value is an object"); 
 
     getKeysDeep(obj[keys[i]],prefix + keys[i] + ": "); 
 
    } else { 
 
     console.log(prefix + "key " + keys[i] + " has value " + obj[keys[i]]); 
 
    } 
 
    } 
 
} 
 

 
getKeysDeep(obj,"")

+0

這允許我訪問第一個對象,但如果我有:{1:test},它不會允許我訪問「test」 –

+0

@JaelSaavedra請參閱更新 – nvioli

+0

謝謝!是的,這與許多級別的工作! –

0

這個循環的工作呢!

Object.keys(result).forEach(function (key) { 
     console.log(result[key]); 
     var test = result[key]; 
     Object.keys(test).forEach(function (key) { 
     console.log(test[key]); 
     var testTwo = test[key]; 
      Object.keys(testTwo).forEach(function (key) { 
      console.log(testTwo[key]); 
      var testThree = testTwo[key]; 
      }); 
     }); 
    }); 

但@nvioli的回答更準確。