javascript - 试图在 JS 中实现 isRepdigit() 算法
问题描述
我对 Javascript 环境很陌生。我认为,为了擅长它,最重要的方法之一就是练习。所以我正在尝试创建一种算法来检测数字是否有重复数字。
我尝试创建的算法应该如下所示,
将数字转为字符串以使用字符串原型。
使用拆分原型来达到该数字对条件的每个索引。
如果数组第一个索引 === arrays[i+1] 它应该创建新数组并 push(1),否则 push(0)
在算法结束时,我们应该将最后一个数组的每个元素相乘。
如果结果返回 > 0 ,则“为真”,否则为“假”。
我的错误在哪里?任何人都可以帮助我吗?
这是我的代码,
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; }
解决方案
问题是您对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;
}