3

Can someone help explain the logic used in the JavaScript code here?

The code below checks to see if two strings are anagrams of each other, but I don't understand the method being used to check the string.

Thanks.

<script type="text/javascript">
$(document).ready(function() {

    var anagram = function(str1, str2){
    if (str1.length !== str2.length) {
        return false;
    }

    var sortstr1 = str1.split('').sort().join('');
    var sortstr2 = str2.split('').sort().join('');

    return (sortstr1 === sortstr2);
}

    $('.AnagramChecker').on('click', function(e) {
        e.preventDefault();
        if($('#string1').val() == '') {
            $('#string1').addClass('error');
            if($('#string2').val() == '') {
                $('#string2').addClass('error');
            }
            $('.results').empty();
            $('.results').hide();
        } else {
            $('#string1').removeClass('error');
            if($('#string2').val() == '') {
                $('#string2').addClass('error');
                $('.results').empty();
                $('.results').hide();
            } else {
                $('#string2').removeClass('error');
                var isAnagram = anagram($('#string1').val(), $('#string2').val());
                $('#string1').val('');
                $('#string2').val('')
                $('.results').show();
                $('.results').empty().append('Anagram is: ' + isAnagram);
            }
        }
    });
});
</script>
kb2321
  • 31
  • 5
  • If you don't want to use prebuild methods like .split() .sort() .join() then [see this](https://stackoverflow.com/a/64952807/9370941) – 4nkitpatel Nov 22 '20 at 10:03

3 Answers3

3

Both strings are being split down into arrays of their individual characters, which are then sorted alphabetically and joined again into strings. The strings are then compared, and if they are the same, are anagrams of one another.

Jason Fetterly
  • 182
  • 1
  • 12
0
function anagrams(str1,str2){

  //spliting string into array   
  let arr1 = str1.split("");
  let arr2 = str2.split("");

  //verifying array lengths
  if(arr1.length !== arr2.length){
      return false;
  }     

  //creating objects
  let frqcounter1={};
  let frqcounter2 ={};

//   looping through array elements and keeping count
  for(let val of arr1){
     frqcounter1[val] =(frqcounter1[val] || 0) + 1; 
  }
  for(let val of arr2){
     frqcounter2[val] =(frqcounter2[val] || 0) + 1; 
  }

  console.log(frqcounter1);
  console.log(frqcounter2);

  //loop for every key in first object
  for(let key in frqcounter1){
      //if second object does not contain same frq count
      if(frqcounter2[key] !== frqcounter1[key]){
        return false;
      }
  }
  return true;

}

anagrams('anagrams','nagramas');
0
function compare(a1,a2){
  if(a1.length != a2.length){
    return false
  }
  var f1 = {}, f2 ={};

  for(var a of a1){
    f1[a] = ++f1[a] || 1
  }
  for(var a of a2){
    f2[a] = ++f2[a] || 1
  }

  for(var key in f1){
    if(!(key in f2)){
      return false
    }
    if(f1[key] != f2[key]) {
      return false

    }
  }

  return true

}
shubhs
  • 36
  • 3