<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>How many Letters?</title> </head> <body> <textarea id="input" name="input" id="" cols="30" rows="10"></textarea> <button id="submit" type="submit">Submit</button> <h3>Output</h3> <table id="output"></table> </body> <style> table, th, td { border: 1px solid black; } </style> <script> const btn = document.querySelector("#submit"); const textarea = document.querySelector("#input"); const table = document.querySelector("#output"); btn.addEventListener("click", () => { let frequency = getFrequency(textarea.value); output.innerHTML = mapToTableCells(frequency); }); function mapToTableCells(map) { let str = "<tr><th>Character</th><th>Times Appeared</th></tr>"; for (const pair of map[Symbol.iterator]()) { str += `<tr><td>${pair[0]}</td><td>${pair[1]}</td></tr>` } return str; } function getFrequency(str) { const freq = new Map(); for (let i = 0; i < str.length; i++) { const char = str.charAt(i); if (freq.has(char)) { let count = freq.get(char); freq.set(char, count + 1); } else { freq.set(char, 1); } } return freq; } </script> </html>