Javascript 返回并记录同一变量don';不匹配

Javascript 返回并记录同一变量don';不匹配,javascript,arrays,Javascript,Arrays,我有一个名为bars的数组,其中包含进度条的活动id号。我希望遍历此数组以查找与其索引不匹配的第一个值(用于查找最低可用ID)。我的(显然不正确)解决方案如下: var bars = [0,1]; function getNewBarID(counter) { var i = counter || 0; //sets i to counter value if it exists, or to 0 if it doesn't if (bars[i] == i) { ++i;

我有一个名为bars的数组,其中包含进度条的活动id号。我希望遍历此数组以查找与其索引不匹配的第一个值(用于查找最低可用ID)。我的(显然不正确)解决方案如下:

var bars = [0,1];
function getNewBarID(counter) {
  var i = counter || 0; //sets i to counter value if it exists, or to 0 if it doesn't
  if (bars[i] == i) {
    ++i;
    getNewBarID(i);
  } else {
    console.log(i);
    return i;
  }
}
getNewBarID();
当我运行这个(在节点控制台和chrome js控制台中)时,它将
2
记录到控制台并返回
undefined
,而它应该返回
2

什么

编辑:当使用空数组运行函数时,它会返回并记录
0
(更多内容!?)

可能:

return getNewBarID(i);
但老实说,它应该是:

const newBar = bars.find((el,i) => el !== i) || bars.length; //newBar contains the result...
或者使用一个好的旧for循环再长一点:

function getNewBarID(){
  let i = 0;
  while(bars[i] === i) i++;
  return i;
}
可能:

return getNewBarID(i);
但老实说,它应该是:

const newBar = bars.find((el,i) => el !== i) || bars.length; //newBar contains the result...
或者使用一个好的旧for循环再长一点:

function getNewBarID(){
  let i = 0;
  while(bars[i] === i) i++;
  return i;
}

那是因为你第一次跑步

getNewBarID();
在哪里

这是真的。从那里您可以进行下一个调用,是的,但是第一个调用执行时没有返回值。您最终会得到一个返回值,但首先执行了两次,没有返回任何内容。只需在if案例中添加一个返回:

return getNewBarID(i);

那是因为你第一次跑步

getNewBarID();
在哪里

这是真的。从那里您可以进行下一个调用,是的,但是第一个调用执行时没有返回值。您最终会得到一个返回值,但首先执行了两次,没有返回任何内容。只需在if案例中添加一个返回:

return getNewBarID(i);

生活从来没有像你的解决方案那么简单:生活从来没有像你的解决方案那么简单:PDammit,总是太迟。该死,总是太迟。