0

for self development purposes I want to create a function with two parameters - string and an array. It should return a string without the letters given in the array.

function filterLetters(str, lettersToRemove) {

}

const str = filterLetters('Achievement unlocked', ['a', 'e']);

Could someone give me any pointers on how to achieve this?

kkkjjj
  • 73
  • 7
  • Does this answer your question? [How can I remove a character from a string using JavaScript?](https://stackoverflow.com/questions/9932957/how-can-i-remove-a-character-from-a-string-using-javascript) – kmoser May 24 '22 at 06:13
  • Do you want the capital `A` removed too, or is it just lowercase letters you're asking about? – Andy May 24 '22 at 06:15

5 Answers5

1

For each letter to be replaced, remove it (i.e. replace it with ''). When done, return the updated string:

function filterLetters(str, lettersToRemove) {
    lettersToRemove.forEach(function(letter){
        str = str.replaceAll(letter, '');
    })
    return str
}

Also see How to replace all occurrences of a string in JavaScript.

kmoser
  • 8,780
  • 3
  • 24
  • 40
1

You can use regex with replaceAll to remove all char from the string.

If you want to consider upper case also then use 'gi' else no need for regex also. str.replaceAll(char, '')

const removeChar = (str, c) => str.replaceAll(new RegExp(`[${c}]`, "gi"), "");

const run = () => {
  const str = "Achievement unlocked";
  const chars = ["a", "e"];

  let result = str;
  chars.forEach((char) => {
    result = removeChar(result, char);
  });
  return result;
};

console.log(run());
Rahul Sharma
  • 9,534
  • 1
  • 15
  • 37
0

One easy way to do this would be to just loop over each value in the array and call the replace string method on str with each indices character. The code below does this.

function filterLetters(str, lettersToRemove){
   for (const letter of lettersToRemove){
      str = str.replaceAll(letter,"");
   }
   return str;
}
0

Create a regular expression by joining the array elements with a | (so a|e), and then use replaceAll to match those letters and replace them with an empty string.

If you want both upper- and lower-case letters removed add the "case-insenstive" flag to the regex. 'gi' rather than 'g'.

function filterLetters(str, lettersToRemove) {
  const re = new RegExp(lettersToRemove.join('|'), 'g');
  return str.replaceAll(re, '');
}

const str = filterLetters('Achievement unlocked', ['a', 'e']);

console.log(str);
Andy
  • 61,948
  • 13
  • 68
  • 95
0

You should just transform the string into array by using split function and loop over that array and check if each character exist in the second argument of your function. To make this function not case sensitive I use toLowerCase to convert character to

function filterLetters(str, lettersToRemove) {
  return str.split('').reduce((acc, current)=> {
    if(lettersToRemove.indexOf(current.toLowerCase()) == -1){
      acc.push(current);
    }
    return acc;
  }, []).join('');
}

const str = filterLetters('Achievement unlocked', ['a', 'e']);

console.log(str);
Yves Kipondo
  • 5,289
  • 1
  • 18
  • 31