如何检查某个数字是否有重复的数字(在其中的任何位置)?
给出的数字如下:
1, 10, 11, 1010, 1981
输出应该告诉他们哪个有重复的数字:
false, false, true, true, true
答案 0 :(得分:3)
我认为最快的方法是进行RegExp测试。您可以使用它来快速判断是否存在重复,并且它足够紧凑以便在条件运算符中使用。这是一个使用数字和数字字符串的示例。
function hasRepeatingdigits(N) {
return (/([0-9]).*?\1/).test(N)
}
console.log(
[1, 10, 11, 1010, 1981, 12345678901, 123456789].map(hasRepeatingdigits)
)

(编辑-Isaac B)
以下是RegExp工作原理的细分:
[0-9]
创建一个0到9之间的单个字符列表
匹配。 ([0-9])
将此列表定义为
第一个捕获组。如果您只搜索char并且不需要RegExp来执行后续操作,则不需要这些parens。 (即/ [0-9] /是你需要在字符串中找到char 0到9的第一个索引,或者在RegExp测试中找到true) .
匹配任何单个字符 - 除了行终止符。添加延迟量词*?
匹配0到无穷大时间,尽可能少的时间。\1
匹配与第一个捕获组总结:/([0-9]).*?\1/
是一个正则表达式,它遍历一个字符串,查找每个字符串0到9,并在第一次找到匹配时返回匹配当前第一个捕获组中的字符。
在字符串'123432'
中,此RexExp将在捕获组1上返回完整匹配:'2343'
:'2'
。
RegExp.prototype.test()使用提供的RegExp搜索字符串,如果RegExp返回匹配则返回true,否则返回false。这可以很容易地修改,以便使用/([A-Za-z]).*?\1/).test(N)
找到重复的字母字符。
除了RegExp上非常有用的MDN部分之外,我强烈建议那些努力让他们更熟悉的人查看这个RegularExpressions101工具。
答案 1 :(得分:2)
{{1}}
答案 2 :(得分:1)
您可以使用Array#indexOf
和Array#lastIndexOf
支票。
function check(a, _, aa) {
return aa.indexOf(a) !== aa.lastIndexOf(a);
}
console.log([1, 10, 11, 1010, 1981].map(a => a.toString().split('').some(check)));

答案 3 :(得分:1)
使用Array.prototype.map()
和String.prototype.match()
函数的简短解决方案:
function checkForRepeatingDigits(N) {
return N.map(function (v) {
return [v, Boolean(String(v).match(/(\d)\d*?\1/g))];
});
}
console.log(checkForRepeatingDigits([1, 10, 11, 1010, 1981]));
答案 4 :(得分:1)
这首先将数字转换为带有N = N + ''
的字符串,然后检查split()
的结果,这是一个String函数,它根据分隔符将字符串压缩为较小的部分。
例如,如果我将"aba"
拆分为"b"
,我将获得一个包含["a", "a"]
的数组。如您所见,如果出现"b"
,则返回数组的长度为2
。如果还有更多,则会超过2
。这就是我在我的解决方案中使用的内容。
作为奖励,它适用于其他类型的数据,甚至是null
和undefined
。 ;)
function check(N) {
for (var N = N + '', i = (N).length; i--;)
if (N.split(N[i]).length > 2)
return true;
return false;
}
[1, 10, 11, 1010, 1981, "abcd23", "aab", "", null, undefined].forEach(num => {
console.log(num, check(num));
});
答案 5 :(得分:0)
function repeated(n) {
var digits = [];
var digit;
while (n) {
digit = n % 10;
if (digits[digit]) return true;
digits[digit] = true;
n = Math.floor(n / 10);
}
return false;
}
[1, 10, 11, 1010, 1981].forEach(n => console.log(n, repeated(n)));