2014-01-10 95 views
0

我有一個遞歸函數返回一個對象。該對象的深度根據輸入而變化,並且鍵也依賴於輸入。 JSON格式,對象可以是這個樣子:搜索對象中的鍵值/類型

{ 
    a: { 
     b: { 
      c: 3 // Keys with an integer value are the target of the search 
     }, 
     c: 2 
    } 
} 

我如何才能找到鑰匙是命名c或含有整數類型的值?

+1

第一:在JavaScript中,這不叫做「數組」。這是一個對象。 – Pointy

+2

你可能不能沒有某種迭代,但你不必嵌套任何東西,遞歸地做。 – adeneo

+0

@Pointy用正確的術語更新了問題。 – daviga404

回答

0

你可以做這樣的事情:

function search(obj) { 
    for (prop in obj) { 
     if (obj.hasOwnProperty(prop)) { 
      if (prop === "c") { 
       console.log(obj[prop]); // or whatever you want to do here 
      } else if (typeof obj[prop] === "object") { 
       search(obj[prop]); 
      } 
     } 
    } 
} 

fiddle

0

Lodash這些是偉大的:

var val = _(obj).map(function recursive(val, key) { 
    if (key === 'c') 
     return val; 
    else if (typeof val === "object") 
     return _.map(val, recursive); 
}).flatten().value(); 

Lodash文檔:http://lodash.com/docs

的jsfiddle:http://jsfiddle.net/JVf6D/2/