检查数字是否有重复数字

vsy*_*ync 4 javascript

如何检查一个数字是否在数字中(其中的任何位置)出现多次?


输入数字示例:

1, 10, 11, 1010, 1981
Run Code Online (Sandbox Code Playgroud)

输出应该告诉其中哪些有重复的数字:

false, false, true, true, true
Run Code Online (Sandbox Code Playgroud)

发布了jsperf 页面中给出的所有好的答案

Isa*_*c B 5

我认为最快的方法是 RegExp 测试。您可以使用它来快速判断是否存在重复,并且它足够紧凑,可以在条件运算符中使用。这是一个处理数字和数字字符串的示例。

function hasRepeatingdigits(N) {
  return (/([0-9]).*?\1/).test(N)
}  

console.log(
[1, 10, 11, 1010, 1981, 12345678901, 123456789].map(hasRepeatingdigits)
)
Run Code Online (Sandbox Code Playgroud)

(编辑-艾萨克 B)

以下是 RegExp 工作原理的详细说明:

  • 创建[0-9]要匹配的 0 到 9 之间的单个字符的列表。
  • 添加括号([0-9])将此列表定义为第一个捕获组。如果您仅搜索字符并且不需要 RegExp 来执行后续操作,则不需要这些括号。(即 /[0-9]/ 是您在字符串中查找 char 0 到 9 的第一个索引所需的全部内容,或者在 RegExp 测试中为 true)
  • 匹配.任何单个字符 - 除了行终止符。添加惰性量词*?匹配 0 到无限次,次数越少越好。
  • \1与第一个捕获组最近匹配的文本相同

总之:/([0-9]).*?\1/是一个正则表达式,它循环访问字符串,查找从 0 到 9 的每个字符,并在第一次找到与当前第一个捕获组中的字符匹配时返回匹配项。

在字符串 中'123432',此 RexExp 将返回完全匹配:'2343'on capture group 1: '2'

RegExp.prototype.test() 使用提供的 RegExp 搜索字符串,如果 RegExp 返回匹配则返回 true,否则返回 false。可以轻松修改它以查找重复的字母字符以及使用/([A-Za-z]).*?\1/).test(N).

除了关于RegExp的非常有用的 MDN 部分之外,我强烈建议那些想要更熟悉它们的人们查看这个RegularExpressions101工具。