Uczymy się sprawdzać, czy dwa napisy są anagramami – są utworzone z tych samych liter w takiej samej ilości, ale dowolnej kolejności, wielkość i spacje nie mają znaczenia.

Najpierw zobaczmy, jak usuwać spacje z tekstu:

function removeSpaces(str){
   return str.replace(/\s/g, '');
}

console.log(removeSpaces("   Bla   bla    bla   "));

Flaga g czyli global, \s czyli białe znaki, podmianka na pusty napis czyli usuwanie spacji.

Ok, pierwszy sposób to usunąć spacje, wszystko zrównać do małych liter, posortować i sprawdzić, czy jest ten sam napis:

function isAnagram(str1, str2) {
 
  str1 = str1.replace(/\s/g, '').toLowerCase()
  str2 = str2.replace(/\s/g, '').toLowerCase()

  if (str1.length !== str2.length) {
    return false
  }

  str1 = str1.split('').sort().join('')
  str2 = str2.split('').sort().join('')

  return str1 === str2
}

Ok, teraz lepsza wersja:

function isAnagram(str1, str2) {

    str1 = str1.replace(/\s/g, '').toLowerCase();
    str2 = str2.replace(/\s/g, '').toLowerCase();

    if (str1.length !== str2.length) {
        return false;
      }

    let counter = new Map();

    for (let letter of str1) {
        if(!counter.has(letter))
            counter.set(letter, 1);
        else 
            counter.set(letter, counter.get(letter)+1)
        
    }

    for (let letter of str2) {

      if(!counter.has(letter))
            return false;
      if(counter.get(letter) < 0)
            return false;
      counter.set(letter, counter.get(letter)-1);

    }

    return true;
  }

Bardzo ważne jest, abyśmy rozumieli, co robimy i nie kopiowali przykładów z internetu na ślepo. W przykładzie znalezionym w internecie ja na przykład zauważyłem, że najpierw porównują długość napisów i zwracają false, a dopiero potem usuwają spacje…

Generalnie przechodzimy po wszystkich literach pierwszego napisu i dopisujemy je oraz ich count.

Potem przechodzimy po drugim i odejmujemy ich count, a jak jakiejś nie ma to zwracamy fałsz… Jakby ich ilość okazała się poniżej 0 to tak samo.

W przykładzie, który znalazłem w internecie:

  • Najpierw porównywali długość napisów, a później zamieniali spacje na puste znaki
  • Nie sprawdzali, czy ilość liter nie spadła poniżej zera (jakby has sprawdzało prawdziwość wartości a nie tylko istnienie klucza)

To tak ku przestrodze.