我需要创建一个函数来删除重复的字母,而不管它是大写还是小写。
如果我的输入字符串为 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"));
答案 0 :(得分:2)
let str = `AbraCadABraAlakAzam`
let op = /^[a-z]+$/gi.test(str) && str
.split('')
.reduce((out,inp)=>{
if(!(out[inp.toLowerCase()] || out[inp.toUpperCase()])){
out[inp]=1
}
return out;
},{})
console.log(Object.keys(op).join(''))
所以这里的想法是
split
将字符串分成数组。toLowerCase()
和toUppercase()
检查它是否已经存在。因此通过这种方式在输出中,我们可以在删除重复项的同时保持字符的首次出现。Object.keys()
获取键,并使用Join()
将数组改回字符串。答案 1 :(得分:1)
您可以使用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") );
答案 2 :(得分:0)
给出问题的输入和预期输出,您可以将输入字符串转换为Array
,.reverse()
然后是.join()
数组,使用RegExp
{{1} }与/([a-z])(?=\1|.*\1)/ig
匹配以匹配.replace()
,后跟捕获的字符或后面不是捕获的字符的字符,然后是捕获的字符,再次将字符串转换为数组,a-z
然后是{ {1}}
.reverse()