使用Javascript删除重复字符

使用Javascript删除重复字符,javascript,duplicates,Javascript,Duplicates,我正在努力实现以下输出,但仍有不足之处。我不确定我在这个问题上采取了正确的方法。我希望只允许在该领域的信件也 Html: 如果迭代字符串,通过每次迭代时添加到的集中是否存在被迭代字符的小写版本来过滤它,则逻辑可能会更好 请注意,在测试之前确实需要将字符转换为小写,而当前代码没有这样做(也没有检查重复字符): constmyfunction=(e)=>{ 常量输入=document.getElementById('input-field')。值; 常量alphaInput=input.repla

我正在努力实现以下输出,但仍有不足之处。我不确定我在这个问题上采取了正确的方法。我希望只允许在该领域的信件也

Html:


如果迭代字符串,
通过每次迭代时添加到的
集中是否存在被迭代字符的小写版本来过滤它,则逻辑可能会更好

请注意,在测试之前确实需要将字符转换为小写,而当前代码没有这样做(也没有检查重复字符):

constmyfunction=(e)=>{
常量输入=document.getElementById('input-field')。值;
常量alphaInput=input.replace(/[^a-z]/gi');
const haveChars=新集合();
常量outputArr=[…alphaInput]。筛选器((字符)=>{
const lower=char.toLowerCase();
if(haveChars.has(较低)){
返回false;
}否则{
haveChars.add(较低);
返回true;
}
});
const strwhithoutdupes=outputArr.join(“”);
console.log(strwoutdups);
}

如果对字符串进行迭代,则逻辑可能会更好,
通过每次迭代时添加到的
集中是否存在被迭代字符的小写版本来过滤它

请注意,在测试之前确实需要将字符转换为小写,而当前代码没有这样做(也没有检查重复字符):

constmyfunction=(e)=>{
常量输入=document.getElementById('input-field')。值;
常量alphaInput=input.replace(/[^a-z]/gi');
const haveChars=新集合();
常量outputArr=[…alphaInput]。筛选器((字符)=>{
const lower=char.toLowerCase();
if(haveChars.has(较低)){
返回false;
}否则{
haveChars.add(较低);
返回true;
}
});
const strwhithoutdupes=outputArr.join(“”);
console.log(strwoutdups);
}

这里有一个解决方案,可以在O(n)时间和空间内解决您的问题

const removeDups = (léString) => {
  const strArray = léString.split('')
  const charsSeen = {}
  let stripped = ''
  strArray.forEach(char => {
    if (!charsSeen[char.toLowerCase()]) {
      stripped += char
      charsSeen[char.toLowerCase()] = true
    }
  })

    return stripped
  }

  console.log(removeDups('AbraCadABraAlakAzam'))

这里有一个在O(n)时间和空间内解决您的问题的解决方案

const removeDups = (léString) => {
  const strArray = léString.split('')
  const charsSeen = {}
  let stripped = ''
  strArray.forEach(char => {
    if (!charsSeen[char.toLowerCase()]) {
      stripped += char
      charsSeen[char.toLowerCase()] = true
    }
  })

    return stripped
  }

  console.log(removeDups('AbraCadABraAlakAzam'))

您可以使用
Set
编写一个略短的版本:

const input=document.getElementById('input-field');
input.addEventListener('keyup',handleKeyUp,false);
常数re=/[a-zA-Z]/;
功能handleKeyUp(e){
//将“reduce”与当前元素的值进行比较
//指向先前迭代字母的小写列表
常量重复数据消除=[…e.target.value]。减少((acc,el)=>{
常数k=el.toLowerCase();
如果(!re.test(el)| | acc.tmp.has(k))返回acc;
根据tmp添加(k);
acc.out.push(el);
返回acc;
},{out:[],tmp:new Set()}).out.join(“”);
console.log(重复数据消除);
}

有一个略短的版本,可以使用
Set
编写:

const input=document.getElementById('input-field');
input.addEventListener('keyup',handleKeyUp,false);
常数re=/[a-zA-Z]/;
功能handleKeyUp(e){
//将“reduce”与当前元素的值进行比较
//指向先前迭代字母的小写列表
常量重复数据消除=[…e.target.value]。减少((acc,el)=>{
常数k=el.toLowerCase();
如果(!re.test(el)| | acc.tmp.has(k))返回acc;
根据tmp添加(k);
acc.out.push(el);
返回acc;
},{out:[],tmp:new Set()}).out.join(“”);
console.log(重复数据消除);
}

字母仍在复制-“AbraCdBlkzm”它现在只验证小写字母@用户992731。我想这就是你的意思,上下。想要的输出是“AbrCdlkzm”。这个较短版本的大粉丝所以如果有大写字母A,就不应该有小写字母A。我只想保留第一个出现的字母,不管大小写如何。字母仍在复制-“abracdlkzm”“它现在只验证小写字母@用户992731。我想这就是你的意思,上下。想要的输出是“AbrCdlkzm”。这个较短版本的大粉丝所以如果有大写字母A,就不应该有小写字母A。我只想保留第一个出现的字母,不管大小写如何。
const removeDups = (léString) => {
  const strArray = léString.split('')
  const charsSeen = {}
  let stripped = ''
  strArray.forEach(char => {
    if (!charsSeen[char.toLowerCase()]) {
      stripped += char
      charsSeen[char.toLowerCase()] = true
    }
  })

    return stripped
  }

  console.log(removeDups('AbraCadABraAlakAzam'))