我的代码中的注释可以最好地说明问题。

// Find all commonNums divisible by arr && sequential that produce a whole number quotient.
// commonNums [ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75]
// arr [1,5]
// sequential [ 2, 3, 4 ]
for (var n = 0; n < commonNums.length; n++) {
  for (var o = 0; o < sequential.length; o++) {
    for (var p = 0; p < arr.length; p++) {
  if (commonNums[n] % arr[p] === 0 && commonNums[n] % sequential[o] === 0) {
  console.log(commonNums[n]);
}}}
}


由于数组的长度不同,因此简单地用一个长度为commonNums.length的循环进行迭代就可以产生未定义的值。我的解决方案是使用3个循环,每个数组一个。

如果公用数除以arr没有余数,并且公用数除以顺序没有余数,则返回该数。对于arr [1,5],返回的第一个数字应为60。

为什么此解决方案失败?

最佳答案

如果我正确理解了您的问题,那么应该可以。它返回60,因为这是唯一可被其他两个数组中的每个数字整除的数字。

outerLoop:
for (var n = 0; n < commonNums.length; n++) {
    for (var o = 0; o < sequential.length; o++) {
        for (var p = 0; p < arr.length; p++) {
            if (commonNums[n] % arr[p] != 0 || commonNums[n] % sequential[o] != 0) {
                continue outerLoop;
            }
        }
    }
    console.log(commonNums[n]);
}


更新为使用标签/继续来加快执行速度。

10-06 07:55