使用Java脚本删除重复字符

时间:2019-01-08 00:18:35

标签: javascript duplicates

我正在尝试实现以下输出,但是请保持简短。不确定我是否对此采取正确的方法。我希望也只允许在该字段中输入字母。

HTML:

<input type="text" id="input-field" onkeyup="myFunction()">

Js:

const remDup= s=> s.split("").filter((e,i,f)=>f.indexOf(e)==i).sort().join("")
const myFunction = (e) => {
  let str = document.getElementById('input-field').value
  //Only allow letters no other characters
  if(("abcdefghijklmnopqrstuvwxyz ").indexOf(String.fromCharCode(e.keyCode))===-1){
    e.preventDefault();
    return false;
  }
  console.log(remDup(str))
}

3 个答案:

答案 0 :(得分:2)

如果您迭代字符串,filtering的逻辑可能会更好,具体取决于每次迭代添加到的Set中是否存在要迭代的字符的小写版本

请注意,您要做需要在测试之前将字符转换为小写,而当前代码并没有这样做(看起来也不是在检查重复的字符):

const myFunction = (e) => {
  const input = document.getElementById('input-field').value;
  const alphaInput = input.replace(/[^a-z]/gi, '');
  const haveChars = new Set();
  const outputArr = [...alphaInput].filter((char) => {
    const lower = char.toLowerCase();
    if (haveChars.has(lower)) {
      return false;
    } else {
      haveChars.add(lower);
      return true;
    }
  });
  const strWithoutDupes = outputArr.join('');
  console.log(strWithoutDupes);
}
<input type="text" id="input-field" onkeyup="myFunction()" value="AbraCadABraAlakAzam">

答案 1 :(得分:1)

您可以使用TabVisible: boolean = true编写一个稍短的版本:

Set
const input = document.getElementById('input-field');
input.addEventListener('keyup', handleKeyUp, false);
const re = /[a-zA-Z]/;

function handleKeyUp(e) {

  // `reduce` over the value comparing the current element
  // to a lowercase list of previous iterated letters  
  const deduped = [...e.target.value].reduce((acc, el) => {
    const k = el.toLowerCase();
    if (!re.test(el) || acc.tmp.has(k)) return acc;
    acc.tmp.add(k);
    acc.out.push(el);
    return acc;
  }, { out: [], tmp: new Set() }).out.join('');
  console.log(deduped);
}

答案 2 :(得分:0)

这是解决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'))