Skip to content
Advertisement

Filtering Punctuation from an Array (what is the exclamation ‘!’ doing?)

In example 1, the exclamation (!) is at the start of the punctuation array and does not get logged.

let lettersArray = ['h','i','!','$','%','#','"']

let punctuation = '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~';
let filterPunc = lettersArray.filter((letter) => punctuation.indexOf(letter) > 0 )
console.log(filterPunc);
// ['$', '%', '#']

In example 2, the exclamation is somewhere else in the punctuation array and now gets logged.

let punctuation1 = '"#$%&!'()*+,-./:;<=>?@[\]^_`{|}~';
let filterPunc1 = lettersArray.filter((letter) => punctuation1.indexOf(letter) > 0 )
console.log(filterPunc1);
// ['!', '$', '%', '#']

I believe it’s being interpreted as a logical-not-operator but I’m unsure why since I would assume the quotation marks would make it a string.

Advertisement

Answer

Instead of punctuation.indexOf(letter) > 0 you shall use punctuation.indexOf(letter) >= 0 or better punctuation.includes(letter).

If you use > instead of >= the first element which has index 0 would get excluded. And nevertheless indexOf returns -1 for non existing elements, not 0.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement