为什么在truthy switch语句之后无法得到预期的结果?

时间:2017-11-06 23:09:23

标签: javascript

尝试查找整数的所有可分数,但在切换循环后得到错误的答案。

function divisors(integer) {

  let divNumbers = []

  switch(true) {
    case (integer % 2 === 0):
      divNumbers.push(2);

    case (integer % 3 === 0):
      divNumbers.push(3);

    case (integer % 4 === 0):
      divNumbers.push(4);


    case (integer % 5 === 0):
      divNumbers.push(5);

      break;

    default: divNumbers.push(integer)
  }

  return divNumbers; 
};

divisors(15)

获得3,4,5作为divNumbers,其中4不应该在这里。为什么呢?

2 个答案:

答案 0 :(得分:2)

这是一个不会被硬编码的正确解决方案:

var divisors  = function (num) { 
    const initial = num, result=[]; 
    while(num--) { 
       if (initial % num ===0) { 
           result.push(num); 
       } 
    } 
    return result; 
}

如果您想在除数中得到数字,请执行以下操作:

var divisors  = function (num) { 
    const initial = num, result=[]; 
    num++;
    while(num--) { 
       if (initial % num ===0) { 
           result.push(num); 
       } 
    } 
    return result; 
}

答案 1 :(得分:0)

默认情况下,交换机stamenet会掉线。为了防止这种情况,您应该在每个之后break。话虽如此,在这种情况下,您最终只能使用3,因为15可以被3整除。一旦划分成功,你就break退出了开关:



function divisors(integer) {

  let divNumbers = []

  switch (true) {
    case (integer % 2 === 0):
      divNumbers.push(2);
      break;

    case (integer % 3 === 0):
      divNumbers.push(3);
      break;

    case (integer % 4 === 0):
      divNumbers.push(4);
      break;

    case (integer % 5 === 0):
      divNumbers.push(5);
      break;

    default:
      divNumbers.push(integer)
  }

  return divNumbers;
};

console.log(divisors(15));




为确保您最终同时使用数组中的35,我建议您更换为if条件,因为您需要倍数< / strong>触发条件:

&#13;
&#13;
function divisors(integer) {
  let divNumbers = []

  if (integer % 2 === 0) {
    divNumbers.push(2);
  }

  if (integer % 3 === 0) {
    divNumbers.push(3);
  }

  if (integer % 4 === 0) {
    divNumbers.push(4);
  }

  if (integer % 5 === 0) {
    divNumbers.push(5);
  }
  
  return divNumbers;
}

console.log(divisors(15));
&#13;
&#13;
&#13;

希望这有帮助! :)