微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么模运算符返回 true?

如何解决为什么模运算符返回 true?

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

73312

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

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

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

实际输出[false,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 分配给 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));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。