寻找一种干净的方法来删除重复项并保留第一次出现的重复数字/字母
假设我有一个字符串
AbCyTtaCc113
我想要剩下的是
AbCyT13
最佳答案
[...input].filter((s => c => !s.has(c.toLowerCase()) && s.add(c.toLowerCase()))(new Set)).join("")
使用 Set 扩展字符串会生成一个包含一个字符串的数组。您可以轻松过滤掉重复项。逻辑基本上是:
通过展开字符串将其转换为字符数组 (
[...input]
)。创建一个 Set 并将其存储在闭包内作为
s
。 ((s => ...)(新集)
)过滤掉以下字符
该 Angular 色已在集合中 (
!s.has(c.toLowerCase())
如果不是,则将其添加到 Set 中并保留它 (
&& s.add(c.toLowerCase())
)
通过连接将过滤后的数组转回字符串。
或者不区分大小写的版本:
[...new Set(input)].join("")
<小时/>
命令式版本是:
let result = "";
{
const duplicates = new Set();
for(const char of input) {
if(!duplicates.has(char.toLowerCase()) {
duplicates.add(char.toLowerCase());
result += char;
}
}
}
关于JavaScript 方法从字符串/数字中删除不区分大小写的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56048968/