JavaScript中最小的未使用ID

JavaScript中最小的未使用ID,javascript,arrays,Javascript,Arrays,我正在尝试这个关于Codewars的测验: 您有很多数据要管理,当然,您使用零基和非负ID使每个数据项都是唯一的 因此,您需要一个方法,该方法返回下一个新数据项的最小未使用ID 注意:给定的已用ID数组可能未排序。出于测试原因,可能存在重复的ID,但您不必查找或删除它们 简而言之,您将获得一个数组。测验要求的是找出最小的未使用的数字 例如: [0,1,2,3,5] // Output: 4 [1,2,3,5] // Output: 0 [0,1,2,3,4,5] // Output: 6 [0,

我正在尝试这个关于Codewars的测验:

您有很多数据要管理,当然,您使用零基和非负ID使每个数据项都是唯一的

因此,您需要一个方法,该方法返回下一个新数据项的最小未使用ID

注意:给定的已用ID数组可能未排序。出于测试原因,可能存在重复的ID,但您不必查找或删除它们

简而言之,您将获得一个数组。测验要求的是找出最小的未使用的数字

例如:

[0,1,2,3,5] // Output: 4
[1,2,3,5] // Output: 0
[0,1,2,3,4,5] // Output: 6
[0,0,0,0,0,0] // Output: 1
[0,1,0,2,0,3] // Output: 4
我的代码无法通过一些测试。测试的输入是隐藏的,所以我无法找出原因。是什么导致了这个问题

const nextId=ids=>{
让洛维斯蒂德;
if(Math.max(…ids)+1==ids.length){
lowstid=Math.max(…id)+1;
}否则{
让sortedis=ids.sort((a,b)=>a-b);
for(设i=0;ilog(nextId([0,1,0,2,0,3])//4
你把它复杂化了

    function doStuff(stuff)
    {
        for(let i = 0; i < stuff.length + 1; i++)
        {
            if(stuff.indexOf(i) == -1)
                return i;
        }
    }
函数doStuff(stuff)
{
for(设i=0;i
看起来您错过了这一行说明:

注意:给定的已用ID数组可能未排序。出于测试原因,可能存在重复的ID,但您不必查找或删除它们

根据代码的逻辑,如果存在重复项,则该值将与索引不匹配。您需要实际比较这些值以考虑重复项

function nextId(ids) {
  let lowestId = 0;
  let sortedIds = ids.sort((a, b) => a - b);
  for (let i = 0; i < sortedIds.length; i++) {
    if (lowestId === sortedIds[i] && lowestId !== sortedIds[i + 1]) {
      lowestId++;
    }
    else if (lowestId !== sortedIds[i + 1]) {
      return lowestId;
    }
  }
  return lowestId
}
函数nextId(ids){
设lowstid=0;
让sortedis=ids.sort((a,b)=>a-b);
for(设i=0;i
这种方法将对象作为可见值

开始节点是
-1
,因为第一个缺少的
id
可能为零

性能:

  • 要收集所有节点:O(n)
  • 要查找缺少的最小
    id
    :小于O(n)
函数nextId(ids){
const seen={};
设id=-1;
for(id的常量id)seed[id]=true;
而(见[++id]);
返回id;
}
log(nextId([0,1,2,3,5]);//4.
log(nextId([1,2,3,5]);//0
log(nextId([0,1,2,3,4,5]);//6.
log(nextId([0,0,0,0,0,0]);//1.

log(nextId([0,1,0,2,0,3]);//4
请对问题中引用的部分使用blockquote标记,并准确说出问题所在。例如,Codewars给了您什么错误?暂停?有些要求没有达到?什么?排序后,只需找到不等于索引的数字?如果返回undefined,则返回
array.length
@adiga-如果需要排序的话。示例输入已排序。@T.J.Crowder链接提到未排序的数组,OP的代码具有
sort
@adiga-依赖外部链接获取问题内容的风险。:-)非常感谢您的回答:)我很抱歉,但在发布此答案后,我在示例中添加了一些输入。如果您能看一下,我将不胜感激。它与您提供的所有console.log示例一起工作,所以我不知道您现在想要什么!非常感谢。它通过了测试,将函数名从
doStuff
更改为
nextId
:)includes会更好谢谢您。有效:)