2017-03-27 59 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