尝试获取通用除数JavaScript时出现无限循环问题

时间:2019-01-10 11:20:11

标签: javascript infinite

我正在尝试获取某些数字的最接近的公约数,但是由于某种原因,代码陷入无限循环,而idk为什么。例如,假设我有数字2、3和4。在这种情况下,最接近的公因数是12(12%2 = 0、12%3 = 0、12%4 = 0)。这是我的代码:

function sumFracts(l) {
  let isDivis = false;
  let divisor = 1;
  while (!isDivis) {
    divisor++;
    isDivis = true;
    l.map((v, i) => {
      v % divisor !== 0 ? isDivis = false : isDivis;
    });
  }
  return divisor
}

其中l = [2,3,4];

请给我一些关于我在这里做错什么的说明。

2 个答案:

答案 0 :(得分:0)

122, 3, 4的最小公倍数,不是除数。

您的模数倒退了。在您的文本中显示12 % 2 == 0,这是正确的,但是该功能正在测试2 % 12 !== 0

您也可以使用every()方法代替map()

function lcm(l) {
  let product = l.reduce((acc, cur) => acc * cur, 1);
  for (let multiple = 1; multiple <= product; multiple++) {
    if (l.every(v => multiple % v == 0)) {
      return multiple;
    }
  }
}

console.log(lcm([2, 3, 4]));
console.log(lcm([5, 7, 11, 13]));

您可以在Wikipedia中找到更有效的LCM计算方法

答案 1 :(得分:0)

function sumFracts(l) {
    let isDivis = false;
    let divisor = 1;
    while (isDivis===false) {
        divisor++;         
        isDivis = l.every(el=>((divisor % el) == 0));                  
    }
    return divisor
}

console.log(sumFracts([2, 3, 4]))