You are tasked to count the number of words in a text using a Map, any combination of letters, digits and _ (underscore) should be counted as a word. The words should be stored in a Map - the key being the word and the value being the amount of times the word is contained in the text. The matching should be case insensitive. Print the words in a sorted order.
The input comes as an array of strings containing one entry - the text whose words should be counted. The text may consist of more than one sentence.
Examples:
Input:
Far too slow, you're far too slow.
Output:
'far' -> 2 times
're' -> 1 times
'slow' -> 2 times
'too' -> 2 times
'you' -> 1 times
Input:
JS devs use Node.js for server-side JS. JS devs use JS. -- JS for devs --
Output:
'devs' -> 3 times
'for' -> 2 times
'js' -> 6 times
'node' -> 1 times
'server' -> 1 times
'side' -> 1 times
'use' -> 2 times
The output should be printed on the console - print each word in the map in the format "'<word>' -> <count> times", each on a new line.
Here is my JS solution:
function countWordsWithMaps(inputLines) {
let words = inputLines.join('\n').toLowerCase()
.split(/[^A-Za-z0-9_]+/).filter(w => w != '');
let wordsCount = new Map();
for (let w of words)
wordsCount.has(w) ? wordsCount.set(w,
wordsCount.get(w) + 1) : wordsCount.set(w, 1);
let allWords = Array.from(wordsCount.keys()).sort();
allWords.forEach(w =>
console.log(`'${w}' -> ${wordsCount.get(w)} times`));
}
//countWordsWithMaps([
// "Far too slow, you're far too slow."
//]);
countWordsWithMaps([
"JS devs use Node.js for server-side JS. JS devs use JS. -- JS for devs --"
]);
