Mar*_*ers 23 javascript arrays loops sequence
我试图找到一种简单的方法来循环(迭代)数组以找到序列中所有缺少的数字,该数组看起来有点像下面的那个.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
对于上面的数组我需要0189462并0189464注销.
更新:这是我从Soufiane的回答中使用的确切解决方案.
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]
UPDATE
这是使用.reduce的整洁版本
var numArray = [0189459, 0189460, 0189461, 0189463, 0189466];
var mia = numArray.reduce(function(acc, cur, ind, arr) {
  var diff = cur - arr[ind-1];
  if (diff > 1) {
    var i = 1;
    while (i < diff) {
      acc.push(arr[ind-1]+i);
      i++;
    }
  }
  return acc;
}, []);
console.log(mia);Sou*_*sou 30
如果您知道这些数字已经排序并且正在增加:
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
    }
}
小智 15
ES6 风格
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));
结果:[189462, 189464]
观察你的前导零,当阵列被解释时它们将被丢弃 -
var A = [0189459,0189460,0189461,0189463,0189465]
(A返回[189459,189460,189461,189463,189465])
function absent(arr){
    var mia= [], min= Math.min.apply('',arr), max= Math.max.apply('',arr);
    while(min<max){
        if(arr.indexOf(++min)== -1) mia.push(min);
    }
    return mia;
}
var A = [0189459,0189460,0189461,0189463,0189465]; 警报(无(A))
/*返回值:(数组)189462,189464*/
要在序列中找到缺失的数字,首先,我们需要对数组进行排序。然后我们可以确定缺少哪个数字。我在这里提供了一些测试场景的完整代码。此代码将仅识别丢失的正数,如果您传递负值,即使它给出正数。
function findMissingNumber(inputAr) {
  // Sort array
  sortArray(inputAr);
  // finding missing number here
  var result = 0;
  if (inputAr[0] > 1 || inputAr[inputAr.length - 1] < 1) {
    result = 1;
  } else {
    for (var i = 0; i < inputAr.length; i++) {
      if ((inputAr[i + 1] - inputAr[i]) > 1) {
        result = inputAr[i] + 1;
      }
    }
  }
  if (!result) {
    result = inputAr[inputAr.length - 1] + 1;
  }
  return result;
}
function sortArray(inputAr) {
  var temp;
  for (var i = 0; i < inputAr.length; i++) {
    for (var j = i + 1; j < inputAr.length; j++) {
      if (inputAr[j] < inputAr[i]) {
        temp = inputAr[j];
        inputAr[j] = inputAr[i];
        inputAr[i] = temp;
      }
    }
  }
}
console.log(findMissingNumber([1, 3, 6, 4, 1, 2]));
console.log(findMissingNumber([1, 2, 3]));
console.log(findMissingNumber([85]));
console.log(findMissingNumber([86, 85]));
console.log(findMissingNumber([0, 1000]));