当前位置:  开发笔记 > 编程语言 > 正文

在数组/范围javascript中查找所有缺少的元素

如何解决《在数组/范围javascript中查找所有缺少的元素》经验,为你挑选了1个好方法。

我正在尝试编写一个函数来查找数组中所有缺少的元素.该系列从1 ... n开始.输入是未排序的数组,输出是缺少的数字.

以下是我到目前为止:

function findMissingElements(arr) {
  arr = arr.sort();
  var missing = [];

  if (arr[0] !== 1) {
    missing.unshift(1);
  }
  // Find the missing array items
  for (var i = 0; i < arr.length; i++) {

    if ((arr[i + 1] - arr[i]) > 1) {
      missing.push(arr[i + 1] - 1);
    }

  }
  return missing;
}

var numbers = [1, 3, 4, 5, 7, 8]; // Missing 2,6
var numbers2 = [5, 2, 3]; //missing 1, 4
var numbers3 = [1, 3, 4, 5, 7]; // Missing 2,6
console.log(findMissingElements(numbers)); // returns 2,6 correct
console.log(findMissingElements(numbers2)); // returns 1,4
console.log(findMissingElements(numbers3)); // returns 2, 6

我用"if"块"手动"检查了第一个元素,有没有办法处理for循环中第一个元素的情况?



1> Mike Cluck..:

您可以通过跟踪下一个应显示的数字并将其添加到缺失数字列表中,同时小于下一个数字来生成该数字.

function findMissingElements(arr) {
  // Make sure the numbers are in order
  arr = arr.slice(0).sort(function(a, b) { return a - b; });
  let next = 1; // The next number in the sequence
  let missing = [];
  for (let i = 0; i < arr.length; i++) {
    // While the expected element is less than
    // the current element
    while (next < arr[i]) {
      // Add it to the missing list and
      // increment to the next expected number
      missing.push(next);
      next++;
    }
    next++;
  }
  return missing;
}

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有