【问题标题】:Why does the modulo operator return true?为什么模运算符返回true?
【发布时间】:2021-02-12 04:01:37
【问题描述】:

这个问题基本上是说迭代一个整数,并评估该数字是否可以被它的左侧数字整除,如果它是可整除的,则返回一个布尔数组。

73312

  • 第一个数字没有左边的数字,所以它是假的。
  • 下一个是 3/7,计算结果为 false,依此类推。

我运行了测试,一切都很好,但是对于这个数字 (73312),它在应该返回 false 时返回 true。

预期输出[false,false,true,false,true]

实际输出[false,false,true,true,true]

function divisibleByLeft(n) {

  let flag = false;
  const ansArr = [];
  const s = JSON.stringify(n);
  const arr = [];

  for (let i = 0; i < s.length; i++) {
    arr.push(parseInt(s[i]));
  };

  for (let i = 0; i < arr.length; i++) {
    let reminder = arr[i] % arr[i - 1];
    if (reminder !== 0) {
      ansArr.push(flag);
    } else {
      flag = true;
      ansArr.push(flag);
    };
  };
  return ansArr;
};

console.log(divisibleByLeft(73312));

【问题讨论】:

  • 一旦你设置了flag = true,你就永远不会把它设置回false
  • 从技术上讲,在 JavaScript 中,它是 remainder operator,而不是模数/模数。

标签: javascript modulo


【解决方案1】:

您将flag 分配给false 的唯一时间是在函数的开头。当余数也不为 0 时将其赋值为 false:

if (reminder !== 0) {
  flag = false;
  ansArr.push(flag);
} else {

或者完全放弃它并推动布尔值:

if (reminder !== 0) {
  ansArr.push(false);
} else {

或者,更简洁地说,将数字映射到一个数字数组和.map,与每次迭代时数组中的前一个元素进行比较:

function divisibleByLeft(n) {
  return [...String(n)].map((num, i, arr) => num % arr[i - 1] === 0)
}

console.log(divisibleByLeft(73312));

【讨论】:

  • 或者完全放弃它并ansArr.push(remainder === 0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 2021-04-28
  • 1970-01-01
相关资源
最近更新 更多