Optimizing in JS

Saksham

Sonic the hedgehog

You never stop learning is not just a phrase, it is something I live everyday. Today, I was just trying out my skills with JS and was solving an innocuous problem, in JS.

Pangram: A pangram is a sentence using every letter of the alphabet at least once.

E.g. The quick brown fox jumps over the lazy dog.

Like every old school programmer I was trying to solve it in the easiest of ways without breaking a sweat and the first version I could come up with was as under.

// Define an string of all Alphabets.
export const ALPHABETS = "abcedfghijklmnopqrstuvwxyz";

// isPangram allows you input a string to be validated for Pangram
export const isPangram = (pangram) => {

  if(pangram == null || pangram.length == 0) {

    return false;

  }

  pangram = pangra.toLowerCase();

  var x;

  for (x in ALPHABETS){
    if( pangram.indexOf(ALPHABETS[x]) >= 0) {
      continue;
    } else {
      return false;
    }
  }
  return true;
};

So v1 was not much fat code,  I was thinking but then the geek in me was trying to ask can it be simplified further? Optimized in a way it looks cool? and so started my struggle to better the version 1, I had just written.

Problem 1: How to generate the character set

So I thought, instead of having a simple constant string, how about I make it a function to first generate an Array that has all the characters from English; all from A … Z. (Some helpful link)

Array.from({length: 26}, (_, i) => { String.fromCodeCode(97 + i)});

How I used it was like this.

const Alphabets = () => Array.from({length:26}, (_, i) =>String.fromCharCode(97+i));

Now, after having this Array it was time to look for the ‘Pangram’ in the string. Another method every() and includes() came to the rescue.

V2.0

// isPangram allows you to look for Pangram.
export const isPangram = (pangram) => {
     var alphabets = Alphabets();
     var lowerCase = pangram.toLowerCase();
     return alphabets.every( character=>lowerCase.includes(character));
};

and Voila, I think made a better version from what I had at v1.0.

– The – End –