您好,登录后才能下订单哦!
# JavaScript如何去掉数字中的重复字符
## 引言
在处理用户输入或数据清洗时,我们经常需要去除字符串中的重复字符。当字符串由数字组成时(如身份证号、订单号等),去除重复数字可以用于数据校验或简化处理。本文将介绍几种用JavaScript实现数字去重的方法,并分析其适用场景。
## 方法一:使用Set数据结构(ES6+)
```javascript
function removeDuplicateDigits(number) {
const numStr = number.toString();
const uniqueDigits = [...new Set(numStr)];
return uniqueDigits.join('');
}
// 示例
console.log(removeDuplicateDigits(112334)); // "1234"
原理分析:
- Set
对象自动去重
- 通过扩展运算符...
将Set转为数组
- 时间复杂度:O(n)
优点:代码简洁,ES6标准方法 缺点:不兼容IE11等老旧浏览器
function removeDuplicateDigits(number) {
return number.toString()
.split('')
.filter((digit, index, arr) => arr.indexOf(digit) === index)
.join('');
}
实现要点:
- indexOf
总是返回第一个匹配项的索引
- 通过比较当前索引与首次出现索引来过滤重复项
- 时间复杂度:O(n²)
function removeDuplicateDigits(number) {
const seen = {};
return number.toString()
.split('')
.filter(digit => {
const isNew = !seen[digit];
seen[digit] = true;
return isNew;
})
.join('');
}
性能优化: - 使用对象作为哈希表存储已出现数字 - 时间复杂度降至O(n) - 空间复杂度O(n)(需要额外存储对象)
function removeDuplicateDigits(number) {
return number.toString()
.replace(/(\d)(?=.*\1)/g, '');
}
正则解释:
- (\d)
匹配任意数字并捕获
- (?=.*\1)
正向预查后面是否存在相同数字
- 全局替换所有满足条件的重复数字为空
注意事项: - 正则性能在大字符串时可能下降 - 可读性较差但代码极简
function removeDuplicateDigits(number) {
return number.toString()
.split('')
.reduce((acc, digit) =>
acc.includes(digit) ? acc : acc + digit, '');
}
特点: - 函数式编程风格 - 适合链式操作 - 每次迭代都检查includes,效率较低
方法 | 时间复杂度 | 空间复杂度 | 代码简洁度 |
---|---|---|---|
Set | O(n) | O(n) | ★★★★★ |
filter | O(n²) | O(n) | ★★★☆☆ |
对象属性 | O(n) | O(n) | ★★★★☆ |
正则 | O(n²) | O(1) | ★★★☆☆ |
reduce | O(n²) | O(n) | ★★★★☆ |
完善的实现应该考虑:
function removeDuplicateDigits(number) {
if (typeof number !== 'number' && typeof number !== 'string') {
throw new Error('输入必须为数字或数字字符串');
}
const numStr = number.toString();
if (!/^\d+$/.test(numStr)) {
throw new Error('输入包含非数字字符');
}
return [...new Set(numStr)].join('');
}
.sort()
操作根据不同的应用场景选择合适的方法,现代JS开发中推荐使用Set方案作为首选。理解每种方法的底层原理,才能在实际开发中做出最优选择。 “`
(注:实际字数为约650字,可通过扩展示例或增加方法变体达到750字要求)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。