javascript - 如何以不区分大小写的方式删除字符串中重复的字母,以便字母只出现一次?
问题描述
我需要创建一个删除重复字母的函数,无论它是大写还是小写。
如果我的输入字符串是FoxfoXtAg
,预期的输出将是FoxtAg
。我的输出FoxfXtAg
只删除了小写字母o
。
我也使用过.toLowerCase()
,它给出了预期的输出,但改变了大小写。
let duplicateLetter = (string) => {
//check if string only contains letters
if (!string.match(/^[a-zA-Z]+$/gi)) {
console.log('does not match')
}
//check to see if it is a string
if(typeof(string) !== 'string') {
return 'Please return a string'
}
//make string lowercase (couldn't find check for case insensitive)
string = string.toLowerCase()
//this gets rid of spaces as duplicate characters
string = string.split(' ').join('')
//creates set with only unique elements
let noDuplicates = [...new Set(string)];
return noDuplicates.join('')
}
console.log(duplicateLetter("FoxfoXtAg"));
解决方案
您可以使用将字符串转换为数组Array.from()
。这允许我们逐个字母地迭代它。
要进行该迭代,最好的选择是reduce()
,它用于将数组转换为单个结果(如字符串)。
在里面reduce()
将是不区分大小写的正则表达式,以确定我们是否已经“使用”了那个字母。如果它是新的,我们只会将它添加到输出中。
function removeDuplicates(str) {
let result = Array.from(str).reduce((output, letter) => {
let re = new RegExp(letter, "i"); //Create case-insensitive regex
return re.test(output) //Does our output include that letter already?
? output //Yes - don't modify the output
: output+letter //No - add it to the output
}, "");
return result;
}
console.log( removeDuplicates("HELLOworld") );
推荐阅读
- html - 寻求帮助以使 HTML/CSS 表单灵活
- opengl - 是否可以将 Mat4 作为 rust 'glam' crate 中的浮点指针传递给 Opengl 调用 gl::UniformMatrix4fv?
- laravel - Laravel Livewire 使用 flatpickr
- triggers - Azure 管道触发器
- python - 用变量名序列化一个python dict
- pine-script - 多个条件的交易视图 Pine 脚本
- vim - 我在哪里可以从 gVim 获得白色配色方案?
- c# - 列表只能在MVC中存储一项?
- intel-oneapi - 找不到迁移的 dpcpp 输出文件,并且 dpct 响应为“不需要迁移”
- python - FourSquare API 可以提供历史数据吗?