2013-07-09 121 views
4
嵌套对象

嘿大家我试图找不到循环中最有活力的方式,通过一个数组,并返回特定的值返回的特定值... JSON的是深深的结构和可能发生变化,可能会有一个$。每个()公式可以帮助吗?通过循环使用jQuery

例子:

var myobj = { 
    obj1: { key1: 'val1', key2: 'val2' }, 
    obj2: { key1: '2val1', 
      key2: { nest1: 'val1', nest2: 'val2', nest3: 'val3' }, 
      key3: { nest1: 'K3val1', nest2: 'K3val2', 
       nest3: [ 
         { nest1: 'val1', nest2: 'val2', nest3: 'val3' }, 
         { nest1: 'val1', nest2: 'val2', nest3: 'val3' } 
         ] 
       } 
      }, 
    obj3: { key1: 'dddddval1', key2: 'val2' } 
    } 

现在可以说,我想找回“K3val2”价值但不是硬编码就像这样:myobj.obj2.key3.nest2是有一个动态的方式我这样做与$.each() mybe?

+4

关键字:“recursion”。现在是时候谷歌 – zerkms

+0

这不是一个数组,它是一堆嵌套对象的对象。 (它*包含*一个数组,分配给'nest3'的数组)。(它也不是JSON,如标签所示。) –

+2

_“深层次结构化并可能发生变化”_ - 那么您怎么知道哪个键甚至可以查找?你给出的唯一例子是问如何找到一个特定的_value_而不是与特定的_key_相关的值,所以......? – nnnnnn

回答

17

你可以简单地嵌套调用$.each

Live Example | Live Source

// Loop the top level 
$.each(myobj, walker); 

function walker(key, value) { 
    // ...do what you like with `key` and `value` 

    if (value !== null && typeof value === "object") { 
     // Recurse into children 
     $.each(value, walker); 
    } 
} 

如果你想知道你有多深,你也可以这样做:

Live Example | Live Source

var path = ""; 

// Loop the top level 
$.each(myobj, walker); 

function walker(key, value) { 
    var savepath = path; 

    path = path ? (path + "." + key) : key; 

    // ...do what you like with `key` and `value` 

    if (value !== null && typeof value === "object") { 
     // Recurse into children 
     $.each(value, walker); 
    } 

    path = savepath; 
} 
+0

Downvoter:有我误解了这个问题? –

+2

Upvoted,这只是一句废话 – zerkms

+0

@TJCrowder你的回答引发了一场观念感谢..我碰到一个问题,如果我有像 '{“名称”:“船长的企鹅”}' 第一水平。它会给每个字母:s k i p p e r等等。 将它全部包装为一个对象来解决它。 谢谢 –