首页 > 解决方案 > 试图在 JS 中实现 isRepdigit() 算法

问题描述

我对 Javascript 环境很陌生。我认为,为了擅长它,最重要的方法之一就是练习。所以我正在尝试创建一种算法来检测数字是否有重复数字。

我尝试创建的算法应该如下所示,

我的错误在哪里?任何人都可以帮助我吗?

这是我的代码,

function isRepdigit(num) {
  const number = num.toString();
  const newArr = number.split(" ");
  const bag = new Array();
  for (let i = 0; i <= newArr.length; i++) {
    //Number -> 334
    if (newArr[0] === newArr[i]) {
      bag.push(1)
    } else {
      bag.push(0);
    }
  }
  console.log(bag)
  let result = 1;
  for (let i = 0; i < bag.length; i++) {
    result = result * bag[i];
  }
  return result > 0 ? true : false;
}

console.log("1234:", isRepdigit(123))
console.log("1223:", isRepdigit(1223))
console.log("3333:", isRepdigit(3333))
.as-console-wrapper { max-height: 100% !important; }

标签: javascript

解决方案


问题是您对num.split(" "). 它以空格字符分割字符串,但数字之间没有空格。用于num.split("")将每个字符转换为数组元素。

但是您不需要将其更改为数组,因为您可以像数组一样索引字符串。

您还有另一个初学者常见的错误:i <= newArray.length需要使用<,而不是<=

function isRepdigit(num) {
  const number = num.toString();
  const bag = [];
  for (let i = 0; i < number.length; i++) {
    //Number -> 334
    if (number[0] === number[i]) {
      bag.push(1)
    } else {
      bag.push(0);
    }
  }
  console.log(bag)
  let result = 1;
  for (let i = 0; i < bag.length; i++) {
    result = result * bag[i];
  }
  return result > 0 ? true : false;
}

console.log("1234:", isRepdigit(123))
console.log("1223:", isRepdigit(1223))
console.log("3333:", isRepdigit(3333))
.as-console-wrapper { max-height: 100% !important; }

但是你的整个算法很差。没有必要对所有比较进行数组。false只要找到不匹配的字符,您就可以简单地返回。

function isRepdigit(num) {
  const number = num.toString();
  for (let i = 1; i < number.length; i++) {
    if (number[0] !== number[i]) {
      return false;
    }
  }
  return true;
}

console.log("1234:", isRepdigit(123))
console.log("1223:", isRepdigit(1223))
console.log("3333:", isRepdigit(3333))
.as-console-wrapper {
  max-height: 100% !important;
}

另请参阅检查字符串中所有字符是否相等的函数 javascript - 作业警告


推荐阅读