2017-08-24 8 views
1

javascriptで再帰関数を作成しようとしていますが、正しく機能しません。私はオブジェクトデータのjson配列を持っています。私はキーに基づいて何かを見つけたいと思っていて、検索オブジェクトのgotopageキーに基づいて再度検索します。javascriptでjsonオブジェクトを検索する再帰関数

like:find orange - > gotopage - > orange_store - > orange_store - > gotopage - > yellow_store - >同じプロセスが再帰的に入ります。 。

[ 
    { 
     "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)); 

最初の反復のための出力にではなく、すべての反復のために働く:

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

なぜ第三の目的は見つかりません。yellow_store? –

+0

'searchRec'から返されたnullをチェックしていますが、nullを返すことはありません。 javascriptでは、配列内の欠落している要素のインデックスを作成すると、 'undefined'が返されます。 – ivo

答えて

2

再帰を使用して別の例。 forEach()を探して、探しているものを見つけて変数に格納し、ログに記録し、新しく作成した値で関数を再呼び出しします。何も見つからない場合は、nullを返して終了します。

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

ベストソリューションのために@christopherに感謝します。私はconsole.logの代わりにobjを返したいですか? – truesource

+0

はどのオブジェクトですか?それらのすべて? –

+0

はいすべての結果を返したいと思います。 – truesource

関連する問題