CoDEVIANT #11 (4/5/19)

Problem 1: Autocomplete! Yay!

Instructions:

It’s time to create an autocomplete function! Yay!

The autocomplete function will take in an input string and a dictionary array and return the values from the dictionary that start with the input string. If there are more than 5 matches, restrict your output to the first 5 results. If there are no matches, return an empty array.

Example:

autocomplete(‘ai’, [‘airplane’,’airport’,’apple’,’ball’]) = [‘airplane’,’airport’]

For this kata, the dictionary will always be a valid array of strings. Please return all results in the order given in the dictionary, even if they’re not always alphabetical. The search should NOT be case sensitive, but the case of the word should be preserved when it’s returned.

For example, “Apple” and “airport” would both return for an input of ‘a’. However, they should return as “Apple” and “airport” in their original cases.

Important note:

Any input that is NOT a letter should be treated as if it is not there. For example, an input of “$%^” should be treated as “” and an input of “ab*&1cd” should be treated as “abcd”.

(Thanks to wthit56 for the suggestion!)

How Adrian Solved It

function autocomplete(input, dictionary){let array = [];let regexRule = /[A-Z]/ig;input = input.match(regexRule).join(‘’);dictionary.forEach((word)=>{if(word.slice(0,input.length).toLowerCase() === input){if(array.length <=4){array.push(word);}}})return array;}

How the Best Practice Way to Do It Works:

function autocomplete(input, dictionary){var r = new RegExp(‘^’ + input.replace(/[^a-z]/gi,’’), ‘i’);return dictionary.filter(function(w){ return r.test(w); }).slice(0, 5);}
/^pu/i

This lets us hunt for things that start with ‘pu’ regardless of whether one or both of the characters are lowercase or not.

What I’ve learned:

It’s better to use something sleek and simple like .filter( ) instead of lots of array manipulation and for-loops or if-statements. It’s getting a bit clearer to me now how that works and I’m going to really try to set that up in the future. I’m going to start looking back at my previous entries as I solve new problems and see if there are any commonalities that I can pick up on so I don’t keep doing the same thing over and over.

Later nerds, I literally am singing an opera right now.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store