JavaScript递归功能不起作用

时间:2017-03-27 07:03:37

标签: javascript recursion

我正在开发一个游戏项目。我需要帮助我的一个功能。我需要从具有特定ID的数组中找到随机变量。这是我的功能。

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。

感谢您的回答:)

2 个答案:

答案 0 :(得分:2)

您需要另一个return statement

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

如果y小于零,我建议再插入一张支票。

答案 1 :(得分: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))