2017-03-27 83 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); 
    } 
} 

我的問題是,當函數在第一次嘗試時找不到匹配項時,它會用較低的索引再次運行,直到找到匹配的點。但它運行多次後總是返回undefined。

感謝答案:)

+1

之前'randomPick' – Rajesh

+0

@Rajesh你缺少'return'謝謝 –

回答

2

您需要另一個return statement

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

我建議插入另一個檢查,如果y小於零。

0

您忘記了添加第二個return聲明。

另外請注意,您可以縮短使用the ternary operatorcondition ? 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