2017-07-26 2 views
1

bonjour, j'ai un problème de retourner un objet dans ma fonction, Disons que j'ai un objet:javascript trouver en valeur profonde dans un objet/zone

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": {} 
}]; 

ce que je veux est une fonction (en javascript pur) qui peut trouver un objet avec une clé et une valeur spécifiques, et j'ai créé une fonction mais ça ne marche pas bien? , Ma fonction:

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); 
      } 
     } 
    } 
} 

Je ne peux pas voir ce que j'ai fait de mal?

merci.

Répondre

1

Il vous manque un retour après avoir effectué l'appel récursif. Si l'objet est trouvé après avoir été récursif, vous devez continuer à bulle ce résultat (en le retournant). Vous devriez également utiliser i < len (pas i <= len) comme indiqué par @ scott-marcus.

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

merci beaucoup @smarx, voici ce que je voulais, je cherchais une solution pour 6 heures, merci encore –