Javascript 查找循环数组中缺少的数字

Javascript 查找循环数组中缺少的数字,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有两个数组需要比较,并使用Javascript或jQuery查找缺少的数字。查找所有缺失的数字相对来说比较容易,但我需要将第一个数组视为循环数组,以便在第二个数组中的给定数字之间只查找单个缺失的数字 var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13] var unsorted = [13,12,1,3] 如何比较两个数组并返回缺失的数字2,而不同时返回4-11 感谢您的帮助。谢谢大家! 编辑更多信息。比较两个数组可能是错误的方法。这是我目前的代码: /

我有两个数组需要比较,并使用Javascript或jQuery查找缺少的数字。查找所有缺失的数字相对来说比较容易,但我需要将第一个数组视为循环数组,以便在第二个数组中的给定数字之间只查找单个缺失的数字

var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13]
var unsorted = [13,12,1,3]
如何比较两个数组并返回缺失的数字2,而不同时返回4-11

感谢您的帮助。谢谢大家!

编辑更多信息。比较两个数组可能是错误的方法。这是我目前的代码:

// Function: Put numbers in order and return missing number from sequence
// Possible numbers are 1 through 13 max

var cyclical = [13,12,1,3] 
// Other examples, always only four numbers: [13,12,11,2] 1 is missing, [11,12,2,13] 1 is missing

var nonCyclical = [3,1,5,4]
// Another example: [7,3,5,4] 6 is missing

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 missingNumCyclical = absent(cyclical);
// Result: 2,4,5,6,7,8,9,10,11

var missingNum = absent(nonCyclical);
// Result: 2 (This is the desired result.)
//函数:按顺序排列数字,并从序列中返回缺失的数字
//可能的数字最多为1到13
风险值周期=[13,12,1,3]
//其他示例中,始终只有四个数字:[13,12,11,2]1缺失,[11,12,2,13]1缺失
var非循环=[3,1,5,4]
//另一个例子:[7,3,5,4]6缺失
功能缺失(arr){
var mia=[],
最小=数学最小应用(“”,arr),
最大值=数学最大适用值(“”,arr);
同时(最小值<最大值){
如果(arr.indexOf(++min)=-1)mia.push(min);
}
返回mia;
}
var missingNumCyclical=不存在(周期性);
//结果:2,4,5,6,7,8,9,10,11
var missingNum=不存在(非循环);
//结果:2(这是所需的结果。)

欢迎使用堆栈溢出!请通读,特别是做你的研究,为相关的主题,所以,给它一个尝试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运定义“在给定的数字之间”,并显示预期的结果以及您自己解决此问题的尝试。Stackoverflow不是免费的代码编写服务或“家庭作业”服务。目标是让人们帮助您修复代码,而不是为您完成所有的工作(第一篇文章)。我已经添加了额外的信息来帮助定义问题,以及我所处的位置。如果有多个等长缺失的零件,会发生什么?例如,循环=[9,10,11,3,4]Idea-检查您的数字数组,如果第二个数组中缺少元素,则将其添加到位置为0的数组的缺少元素数组(也称为ma[0])。当第二个数组中存在元素时,将ma中的位置增加1。在此之后,您将“按间隙”缺少元素。然后检查,如果ma first和last元素是循环的(first元素first是数字first,last元素last是数字last),如果是,将last合并到first并删除last。然后移除以ma为单位的最长阵列,因为这是周期间隔。然后合并ma的其余部分-这是您的结果:)若需要,我可以明天在js中写下。谢谢。在这个确切的示例中,它似乎找到了数字2,但是如果您将列表2更改为[13,12,2,3],那么它应该找到缺少的数字1,对吗?它似乎没有这样做。结果仍然显示为2。有什么想法吗?
var list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13].sort((a, b) => a > b ? 1 : - 1)
var list2 = [13,12,1,3]
  // Sort the list
  .sort((a, b) => a > b ? 1 : - 1)
  .map((v, i, a) => {
    // Create a clone since shift is mutative
    const clone = [...list1]
    // Shift the array to the position of "v"
    clone.shift(clone.indexOf(v))
    // Slice the array to the position of v + 1
    const result = clone.slice(0, clone.indexOf(a[i + 1]))

    if (result.length === 1) {
      return result[0]
    }

    return undefined
  })
  .filter(n => n != null)