javascriptの再帰関数についてご質問です。
nodejsでwebページの解析をするため、htmlparserで生成したjsonの抽出機能を作成するため、
以下の関数を定義して呼び出したところ、
何故かtrees.length === 0
の時も実行されてしまいます。
本来はarrのlength分だけ関数呼び出しを行いたい(今回で言うと三回)のですが、
実際にはarr.lengthが0のときも呼び出しが行われてしまうので、
datasがundefinedになってしまいます。
javascript
1 2// htmlparserで取得したデータのサンプルです。 3// 取得するデータはwebページにより異なり、順番やデータ数は変化するものとお考えください。 4var datas = [ 5 { 6 name: html, 7 children: [ 8 { 9 name: head, 10 children: [ 11 { 12 name: meta, 13 children: [{...},{...}, ...] 14 }, 15 { 16 name: title, 17 children: [{...},{...}, ...] 18 } 19 ] 20 }, 21 {...}, 22 {...}, 23 . 24 . 25 . 26 ] 27 } 28]; 29 30var arr = [ 'html', 'head', 'title' ], 31 result = dataExtracter(datas, arr, 'name'); 32 33function dataExtracter(datas, trees, param) { 34 if (!trees.length) return datas; 35 36 datas.map(function(item) { 37 38 if (item[param] === trees[0]) { 39 40 trees.shift(); 41 result = item.children; 42 43 if (trees.length > 0) { 44 dataExtracter(result, trees, param); 45 } 46 47 } 48 49 }); 50 51}
初めてプログラムで再帰関数を使用したのですが、
何か考え方が間違っているのでしょうか。R
回答2件
あなたの回答
tips
プレビュー