2016-09-20 14 views
1

keyでオブジェクトを知らずにvalueを検索しようとしています。ネストされたオブジェクトを含めると、関数はキーとオブジェクトを取得し、値を返します。それは(そう願って...)、より効率的になりますので、私はループ内returnを呼び出すキーでオブジェクト値を検索して取得する

/* 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; 
} 

: は、これは私の関数です。

1.誰でもこの機能を使用できますか?これは動作しません。

2.誰かが変更する必要があることを知っていますか?

angular.jsなどの機能はすべて役に立ちます。

ありがとうございました。

答えて

4

hasOwnPropertyを使用しています。また、この場合、デフォルトであるため、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

1

非平坦化は、まずこの問題を解決し機能付: Fastest way to flatten/un-flatten nested JSON objects

、その後、単にあなたが物事を少し逆転し、再帰関数呼び出しの2番目のパラメータを渡すのを忘れて再び

+0

私はオブジェクトをそのまま保つことをお勧めします。結果を試して投稿する。 –

関連する問題