2017-07-26 24 views
1

ハローに、私は私の関数内でオブジェクトを返す問題を抱えている、のは、私は、オブジェクトを持っていると言うことは値によって見つけます純粋なjavascriptで)特定のキーと値を持つオブジェクトを見つけることができます。私は関数を作成しましたが、うまく機能しません。 、私の機能:Javascriptを深くネストされたオブジェクト/配列

function findNested(obj, key, value) { 
    //Early return 
    if (obj[key] === value) { 
     console.log('before return'); //until here . its fine 
     return obj; //not working 
    } else { 
     for (var i = 0, len = Object.keys(obj).length; i <= len; i++) { 
      if (typeof obj[i] == 'object') { 
       this.findNested(obj[i] , key, value); 
      } 
     } 
    } 
} 

私は間違って何をしたのか分かりません。

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

答えて

1

再帰呼び出しを行った後、返品がありません。再帰後にオブジェクトが見つかった場合は、その結果をバブル処理して戻す必要があります。また、@ scott-marcusによって指摘されているi < leni <= lenではなく)を使用する必要があります。

var elements = [{ 
 
    "fields": null, 
 
    "id_base": "nv_container", 
 
    "icon": "layout", 
 
    "name": "container", 
 
    "is_container": true, 
 
    "elements": [ 
 
     //another elements set here 
 
    ] 
 
    }, 
 
    { 
 
    "id_base": "novo_example_elementsec", 
 
    "name": "hello", 
 
    "icon": "edit", 
 
    "view": {} 
 
    } 
 
]; 
 

 
function findNested(obj, key, value) { 
 
    // Base case 
 
    if (obj[key] === value) { 
 
    return obj; 
 
    } else { 
 
    for (var i = 0, len = Object.keys(obj).length; i < len; i++) { 
 
     if (typeof obj[i] == 'object') { 
 
     var found = this.findNested(obj[i], key, value); 
 
     if (found) { 
 
      // If the object was found in the recursive call, bubble it up. 
 
      return found; 
 
     } 
 
     } 
 
    } 
 
    } 
 
} 
 

 
console.log(findNested(elements, "icon", "layout")); // returns object 
 
console.log(findNested(elements, "icon", "edit")); // returns object 
 
console.log(findNested(elements, "foo", "bar")); // returns undefined

+0

おかげでたくさんの@smarx、これは私が望んでいたものですが、私は再び6時間、感謝のためのソリューションを探していました –

関連する問題