2016-09-20 53 views
1

我試圖在不知道對象的情況下找到valuekey,包含嵌套對象,所以函數將獲得一個鍵和一個對象並返回值或未定義。 這是我的函數:通過鍵查找並修改對象值,包括嵌套對象

/* Iterate over object and include sub objects */ 

function iterate (obj, key) { 

    for (var property in obj) { 
     if (obj.hasOwnProperty(property)) { 
      //in case it is an object 
      if (typeof obj[property] == "object") { 
       if (obj.hasOwnProperty(key)) { 
        return obj[key]; //return the value 
       } 
      } 
      else { 
       iterate(obj[property]); 
      } 
     } 
    } 

    return undefined; 
} 

我打電話return在循環中所以這將是更有效的(希望如此......)。

1.是否有人有此功能?這一個不起作用。

2.someone知道如何改變,使其工作?

任何幫助,包括angular.js功能會很好。

謝謝。

回答

4

你逆轉的事情了一下,你忘了第二個參數傳遞給遞歸函數調用。此外,在這種情況下,不需要返回undefined,因爲這是默認設置。

function iterate (obj, key) { 
    var result; 

    for (var property in obj) { 
     if (obj.hasOwnProperty(property)) { 
      // in case it is an object 
      if (typeof obj[property] === "object") { 
       result = iterate(obj[property], key); 

       if (typeof result !== "undefined") { 
        return result; 
       } 
      } 
      else if (property === key) { 
       return obj[key]; // returns the value 
      } 
     } 
    } 
} 
+0

如果值爲leve1.leve2.key,它不會工作多於2個級別 - 它找不到它。 –

+0

我剛測試了5個關卡,並找到了關鍵。 'iterate({a:{b:{c:{d:{key:3}}}}},「key」);'請提供一個不起作用的示例。 – felipeptcho

+0

是的。那是錯的。我已經更新了答案。請現在測試它。 – felipeptcho