For a homework assignment, I made a web page that has a text area. The user inputs some text, hits the analyse button, and the output is supposed to be a list of the frequency of words of a given number of characters.
For example, "one two three" would be two words of three characters and one word of five characters.
It works, but is there room for improvement?
HTML:
<body>
<h3>Text Input</h3>
<textarea id="text" placeholder="type something..." rows="20" cols="80"></textarea>
<button id="analyse">Click to analyze</button>
<h3>Results</h3>
<div id="results"></div>
</body>
JavaScript:
function getWordInfo() {
var text1 = document.getElementById("text").value;
var text2 = text1.replace(/[^\d\w ]+/g," ");
var text3 = text2.split(/[ ]+/);
return text3;
}
function firstLoop() {
var text = getWordInfo();
var wordMap = [];
var i =0;
var looplength = text.length;
for ( i ;i < looplength; i++) {
wordMap.push(text[i].length)
}
return wordMap;
}
function objCon(name,count) { //object constructor
this.name = name;
this.count = count;
}
function maxNum() {
var array1 = firstLoop();
var num = Math.max.apply(Math, array1);
return num;
}
function objArrCon() { //object array constructor
var num = maxNum();
var array1 = [];
var i = 2;
for ( i ; i <= num; i++) {
var myObj = new objCon(i,0);
array1.push(myObj);
}
return array1;
}
function objArrParse() { //updates the object with word info
var array1 = firstLoop();
var array2 = objArrCon();
var loopLength1 = array1.length;
var loopLength2 = array2.length;
for (var i = 0; i < loopLength1; i++) {
for (var m = 0; m < loopLength2; m++) {
if (array2[m].name === array1[i]) {
array2[m].count++;
}
}
}
return array2;
}
function objArrTrun() { //object array truncation
var array1 = objArrParse();
var len = array1.length;
for (var i = 0;i < len; i++) {
if (array1[i].count === 0) {
array1.splice(i, 1);
len--;
}
}
return array1;
}
function formatter() {
var strAr = objArrTrun();
var arrayLength = strAr.length;
var formatStr = [];
for (var i = 0; i < arrayLength; i++) {
var str = "Number of characters: " + strAr[i].name + ", Number of words with this length: " + strAr[i].count;
formatStr.push(str);
}
return formatStr;
}
function clearBox(elementID) {
document.getElementById(elementID).innerHTML = "";
}
function analyseButtonClick() {
clearBox("results");
var html = " ";
var str = formatter();
var len = str.length;
for (var i = 0; i < len; i++) {
html += "<p>" + str[i] + "<p>";
}
document.getElementById("results").innerHTML += html;
}
function init() {
var button = document.getElementById("analyse");
button.onclick = analyseButtonClick;
}
window.onload = init;
\wis equivalent to[A-Za-z0-9_]and thus\dis unnecessary. Did you intend to allow words with underscores? Any single-element grouping can be replaced by the element;/[ ]+/is the same as/ +/. \$\endgroup\$