首页 > 解决方案 > 如何以不区分大小写的方式删除字符串中重复的字母,以便字母只出现一次?

问题描述

我需要创建一个删除重复字母的函数,无论它是大写还是小写。

如果我的输入字符串是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"));

标签: javascript

解决方案


您可以使用将字符串转换为数组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") );


推荐阅读