Javascript 数组-查找序列中缺少的数字

Javascript 数组-查找序列中缺少的数字,javascript,arrays,loops,sequence,Javascript,Arrays,Loops,Sequence,我试图找到一种简单的方法来循环(迭代)数组,以查找序列中所有缺失的数字,该数组看起来有点像下面的数组 var numArray=[0189459、0189460、0189461、0189463、0189465] 对于上面的阵列,我需要注销0189462和0189464 更新:这正是我从苏菲亚尼的答案中使用的解决方案 var numArray = [0189459, 0189460, 0189461, 0189463, 0189465]; var mia= []; for(var i =

我试图找到一种简单的方法来循环(迭代)数组,以查找序列中所有缺失的数字,该数组看起来有点像下面的数组

var numArray=[0189459、0189460、0189461、0189463、0189465]

对于上面的阵列,我需要注销
0189462
0189464

更新:这正是我从苏菲亚尼的答案中使用的解决方案

var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
var mia= [];

    for(var i = 1; i < numArray.length; i++) 
    {     
        if(numArray[i] - numArray[i-1] != 1) 
        {         
            var x = numArray[i] - numArray[i-1];
            var j = 1;
            while (j<x)
            {
                mia.push(numArray[i-1]+j);
                j++;
            }
        }
    }
alert(mia) // returns [0189462, 0189464]
var numArray=[0189459、0189460、0189461、0189463、0189465];
var mia=[];
对于(变量i=1;i而(j如果您知道这些数字是按顺序排列并递增的:

for(var i = 1; i < numArray.length; i++) {
    if(numArray[i] - numArray[i-1] != 1) {
           //Not consecutive sequence, here you can break or do whatever you want
    }
}
for(变量i=1;i
对数组进行排序非常简单:

numArray.sort();
然后,根据对您来说最简单的方式:

  • 您可以遍历数组,捕捉序列模式并在运行时检查它们
  • 您可以将数组拆分为多个序列号数组,然后检查每个单独的数组
  • 您可以将排序后的数组简化为一个成对数组,其中每对都是一个开始和结束序列,然后将这些序列的开始/结束与其他数据进行比较

  • 注意前导零,它们将在解释数组时删除-

    变量A=[0189459、0189460、0189461、0189463、0189465]

    (A返回[189459189460189461189463189465])

    功能缺失(arr){
    var mia=[],min=Math.min.apply(“”,arr),max=Math.max.apply(“”,arr);
    
    而(min我对此使用递归函数

    function findMissing(arr, start, stop) {
    
        var current = start,
            next = stop,
            collector = new Array();
    
        function parseMissing(a, key) {
            if(key+1 == a.length) return;
    
            current = a[key];
            next = a[key + 1];
    
            if(next - current !== 1) {
                collector.push(current + 1);
                // insert current+1 at key+1
                a = a.slice( 0, key+1 ).concat( current+1 ).concat( a.slice( key +1 ) );
                return parseMissing(a, key+1);
            }
    
            return parseMissing(a, key+1);
        }
    
        parseMissing(arr, 0);
        return collector;
    }
    
    如果您正在查看一组庞大的数字,这不是最好的主意。警告:递归函数是资源密集型的(指针和其他),如果您使用庞大的数字,这可能会给您带来意外的结果。您可以看到。这还假设您已对数组进行排序

    基本上,将“findMissing()”函数传递给要使用的数组、起始编号和停止编号,然后让它从那里开始

    因此:


    这里是@Mark Walters的一个变体,它增加了为序列指定下边界的功能,例如,如果您知道序列应该始终从
    0189455
    开始,或者像
    1
    这样的其他数字开始

    还可以调整此代码以检查上边界,但目前只能查找下边界

    //我们的第一个示例数组。
    var numArray=[0189459、0189460、0189461、0189463、0189465];
    //对于该阵列,下二进制将为0189455
    var numArrayLowerBoundary=0189455;
    //我们的第二个示例数组。
    var simpleArray=[3,5,6,7,8,10,11,13];
    //对于该阵列,下边界为1
    var simpleArrayLowerBoundary=1;
    //构建一个html字符串,这样我们就可以在div中很好地显示结果
    var html=“numArray=[0189459、0189460、0189461、0189463、0189465]
    ” html+=“其小写字母为\“0189455\”
    “ html+=“numArray中缺少以下数字:
    ” html+=FindAdministringNumber(numArray,numArrayLowerBoundary); html+=“

    ” html+=“simpleArray=[3,5,6,7,8,10,11,13]
    ” html+=“其小写字母为\“1\”
    “ html+=“simpleArray中缺少以下数字:
    ” html+=findmisingnumbers(simpleArray,simpleArrayLowerBoundary); //在div中显示结果 document.getElementById(“log”).innerHTML=html; //这是用于查找缺失数字的函数! //如果您只需要函数,而不需要演示代码,请复制/粘贴此文件。 函数findMissingNumbers(arrSequence,lowerBoundary){ var mia=[]; 对于(变量i=0;i

    要在序列中查找缺失的数字,首先,我们需要对数组进行排序。然后,我们可以确定缺失的数字。我在这里提供了一些测试场景的完整代码。如果传递负值,则此代码将只识别缺失的正数,即使它给出了正数

    函数findmisingnumber(输入){
    //排序数组
    sortArray(输入);
    //在这里找到丢失的号码
    var结果=0;
    if(inputAr[0]>1 | | inputAr[inputAr.length-1]<1){
    结果=1;
    }否则{
    对于(变量i=0;i1){
    结果=输入[i]+1;
    }
    }
    }
    如果(!结果){
    
    function findMissing(arr, start, stop) {
    
        var current = start,
            next = stop,
            collector = new Array();
    
        function parseMissing(a, key) {
            if(key+1 == a.length) return;
    
            current = a[key];
            next = a[key + 1];
    
            if(next - current !== 1) {
                collector.push(current + 1);
                // insert current+1 at key+1
                a = a.slice( 0, key+1 ).concat( current+1 ).concat( a.slice( key +1 ) );
                return parseMissing(a, key+1);
            }
    
            return parseMissing(a, key+1);
        }
    
        parseMissing(arr, 0);
        return collector;
    }
    
    var missingArr = findMissing(sequenceArr, 1, 10);
    
    function missingNum(nums){
        const numberArray = nums.sort((num1, num2)=>{
          return num1 - num2;
       });
       for (let i=0; i < numberArray.length; i++){
          if(i !== numberArray[i]){
            return i;
          }
       }
     }
     console.log(missingNum([0,3,5,8,4,6,1,9,7]))
    
    function solution(A) {
       var max = Math.max.apply(Math, A);
       if(A.indexOf(1)<0) return 1;
       var t = (max*(max+1)/2) - A.reduce(function(a,b){return a+b});
       return t>0?t:max+1;
    }
    
    var arr = [0189459, 0189460, 0189461, 0189463, 0189465]; 
    var [min,max] = [Math.min(...arr), Math.max(...arr)];
    var out = Array.from(Array(max-min),(v,i)=>i+min).filter(i=>!arr.includes(i));
    
    const findMissing = (arr) => {
    const min = Math.min(...arr);
    const max = Math.max(...arr);
    // add missing numbers in the array
    let newArr = Array.from(Array(max-min), (v, i) => {
        return i + min
    });
    // compare the full array with the old missing array
    let filter = newArr.filter(i => {
        return !arr.includes(i)
    })
    return filter;
    };
    
    const findMissing = (numarr) => {
      for(let i = 1; i <= numarr.length; i++) {
          if(i - numarr[i-1] !== 0) {
            console.log('found it', i)
            break;
          } else if(i === numarr.length) console.log('found it', numarr.length + 1)
        }
      };
    
    console.log(findMissing([1,2,3,4,5,6,7,8,9,10,11,12,13,14]))
    
    let numberArray = [];
    
    for (let i = 1; i <= 100; i++) {
      numberArray.push(i);
    }
    let deletedArray = numberArray.splice(30, 1);
    let sortedArray = numberArray.sort((a, b) => a - b);
    let array = sortedArray;
    
    function findMissingNumber(arr, sizeOfArray) {
      total = (sizeOfArray * (sizeOfArray + 1)) / 2;
      console.log(total);
      for (i = 0; i < arr.length; i++) {
        total -= arr[i];
      }
      return total;
    }
    
    console.log(findMissingNumber(array, 100));
    
    // Find the missing number
    let numArray = [0189459, 0189460, 0189461, 0189463, 0189468];
    let numLen = numArray.length;
    let actLen = Number(numArray[numLen-1])-Number(numArray[0]);
    let  allNumber = [];
    
    for(let i=0; i<=actLen; i++){
      allNumber.push(Number(numArray[0])+i);
    }
    [...allNumber].forEach(ele=>{
      if(!numArray.includes(ele)){
        console.log('Missing Number -> '+ele);
      }
    })
    
    const arr = [1,2,3,5,6,7,8,9];
    
    return arr.find((x,i) => arr[i+1]-x > 1) + 1
    
    //4