2017-03-27 17 views
-1

私はゲームプロジェクトに取り組んでいます。私は私の機能の一つに助けが必要です。私は特定のIDを持つ配列からランダム変数を見つける必要があります。ここに私の機能があります。JavaScript再帰関数が機能していません

function randomPick(id,y){ // dots = array of 10 objects, each has id (farm or barrack); 
    console.log('number '+y) 
    if (id == dots[y].id){ 
     return dots[y] 
    } else{ 
     randomPick(id,y-1); 
    } 
} 

私の問題は、関数が一致する点を見つけるまで、それは低い屈折率を何度も実行され、最初の試行で一致が見つからなかったとき、あります。しかし、それが一回以上実行されると、常に未定義に戻ります。答えを

感謝:)

+1

あなたは 'randomPick' – Rajesh

+0

@Rajesh前に' return'が欠落しているが、私は承知しています –

答えて

2

あなたは別のreturn statementを必要としています。

return randomPick(id, y - 1); 
// ^^^ 

yが0より小さい場合は、別の小切手を挿入することをおすすめします。

0

returnステートメントを追加するのを忘れました。 (condition ? valueIfTrue : valueOtherwise)を使用してロジックを短縮することもできます。これにより、yが配列の境界内にあることを確認する余地が少し広がります。

var dots = [ 
 
    { id: 'farm' }, 
 
    { id: 'barrack' }, 
 
    { id: 'farm' }, 
 
    { id: 'barrack' }, 
 
    { id: 'farm' }, 
 
    { id: 'barrack' }, 
 
    { id: 'farm' }, 
 
    { id: 'barrack' }, 
 
    { id: 'farm' }, 
 
    { id: 'barrack' } 
 
] 
 

 
function randomPick(id, y) { 
 
    console.log('y = ' + y) 
 
    
 
    if (y < 0 || y >= dots.length) return null 
 
    
 
    return id == dots[y].id) ? dots[y] : randomPick(id, y - 1) 
 
} 
 

 
console.log(randomPick('farm', 5))

+2

ありがとう - ポストはわずか39秒離れている場合、それは知っているのは難しいです。 – gyre

+0

謝罪します。時差が見当たりませんでした – Rajesh

関連する問題