首页 > 解决方案 > 未排序数组中的最小非连续数

问题描述

我想编写一个函数,它返回未排序数组的最小非连续数。如果整个数组是连续的,则将扩展数组的最接近的数字。


nextId([1,2,3,4]) returns 5
nextId([1,4,3]) returns 2


我的尝试:

   

 function nextId(arr) {
      let sortnum = arr.sort((a, b) => a - b);

      for (let i = 0; i < arr.length - 1; i++) {

        if (sortnum[i] + 1 !== sortnum[i + 1]) {
          return sortnum[i] + 1
        } 
else(sortnum[sortnum.length - 1] === sortnum[sortnum.length - 2] + 1) {
          return sortnum[sortnum.length - 1] + 1
        }
      }
}

如果我评价 if 或 else 语句,它们本身都可以正常工作,但是当我将它们都放在一个语句中时,它们由于某种原因不起作用。

标签: javascriptarrays

解决方案


如果需要,必须对数组进行切片以制作副本,但这将起作用:

function nextId(arr) {
  return arr.sort().find((v, i, a) => v + 1 != a[i + 1]) + 1;
}

console.log(nextId([1,2,3,4]));
console.log(nextId([1,4,3]));

对于所有值都是后续值的情况,这是由于number + 1 != undefined总是评估为真这一事实而起作用。


推荐阅读