2017-08-24 9 views
1

Ich versuche, eine rekursive Funktion in Javascript zu schreiben, aber nicht richtig funktionieren. Ich habe ein JSON-Array von Objekten Daten, wo ich etwas basierend auf Schlüssel suchen und dann wieder basierend auf GotoPage Schlüssel im Suchobjekt finden.rekursive Funktion in Json-Objekt in Javascript

like: Finde orange -> gotopage -> orange_store -> finde -> orange_store -> gotopage -> yellow_store -> finde also den gleichen Prozess rekursiv.kann dir bitte helfen wo ich falsch liege in meinem Ansatz .

[ 
    { 
     "id": 1, 
     "find": "orange", 
     "gotopage": "orange_store" 
    }, 
    { 
     "id": 2, 
     "find": "orange_store", 
     "gotopage": "yellow_store" 
    }, 
    { 
     "id": 3, 
     "find": "black_store", 
     "gotopage": "black_store" 
    }, 
    { 
     "id": 4, 
     "find": "yellow_store", 
     "gotopage": "white_store" 
    }, 
    { 
     "id": 5, 
     "find": "black_store", 
     "gotopage": "red_store" 
    } 
] 


function searchRec(search, myArray) { 
    for (var i = 0; i < myArray.length; i++) { 
     var res = []; 
     if (myArray[i].find == search) { 
      if (myArray[i] !== null) { 
       console.log(myArray[i]); 
       res = searchRec(myArray[i].gotopage, myArray); 
       if (res !== null) { 
        return res; 
       } 
       return myArray[i]; 
      } 

     } 
    } 
} 

function findNode(arr) { 
    for (i = 0; i < arr.length; i++) { 
     searchRec(arr[i].find, arr); 
     break; 
    } 
} 
console.log(findNode(json)); 

Ausgang für die erste Iteration aber nicht für jede Iteration arbeiten:

Object {id: 1, find: "orange", gotopage: "orange_store"} 
Object {id: 2, find: "orange_store", gotopage: "yellow_store"} 
+0

Warum ist das dritte Objekt nicht gefunden: yellow_store? –

+0

Sie suchen nach null, das von 'searchRec' zurückgegeben wird, aber niemals Null zurückgibt. In JavaScript führt das Indizieren eines fehlenden Elements in einem Array zu undefined und nicht zu null. – ivo

Antwort

2

Ein weiteres Beispiel Rekursion. Ich mache eine einfache forEach() zu finden, was Sie suchen und speichern Sie es in Variablen, protokollieren Sie es und rufen Sie die Funktion mit unseren neu erstellten Werten. Wenn es nichts findet, gibt es null zurück und endet.

const data = [ 
 
    { 
 
     "id": 1, 
 
     "find": "orange", 
 
     "gotopage": "orange_store" 
 
    }, 
 
    { 
 
     "id": 2, 
 
     "find": "orange_store", 
 
     "gotopage": "yellow_store" 
 
    }, 
 
    { 
 
     "id": 3, 
 
     "find": "black_store", 
 
     "gotopage": "black_store" 
 
    }, 
 
    { 
 
     "id": 4, 
 
     "find": "yellow_store", 
 
     "gotopage": "white_store" 
 
    }, 
 
    { 
 
     "id": 5, 
 
     "find": "black_store", 
 
     "gotopage": "red_store" 
 
    } 
 
]; 
 

 
function recursiveStore(search, myArray) { 
 
    let obj = {} 
 
    let newSearch; 
 
    data.forEach(store => { 
 
     if (search === store.find) { 
 
     obj = store 
 
     newSearch = store.gotopage 
 
     } 
 
    }) 
 
    if (Object.keys(obj).length === 0) { 
 
     return null 
 
    } 
 
    console.log(obj) 
 
    recursiveStore(newSearch, myArray) 
 
} 
 

 
recursiveStore("orange", data)

+0

danke @ Christopher für die beste Lösung. Ich möchte obj statt console.log zurückgeben? – truesource

+0

welches Objekt? alle von ihnen? –

+0

ja alle Ergebnisse, die ich zurückgeben möchte. – truesource

Verwandte Themen