Ok so I just want to start off by saying I know very little about javascript. I am currently in a beginners course for javascript and am just being introduced to objects.
The goal of what I am trying to do is have a field were a user can type in text. From there after pressing a button The code needs to do two main things.
1. Give a number of occurrences of each letter of the alphabet used in the text
user enters: Hello world
eg. A=0, B=0,.. E=1,.. L= 3, etc
2. Length of words
eg. 5-letter word = 2 (this needs to display only the ones that are found)
Like I said I am just being introduced to objects and have a minimal foundation with functions and arrays. Hopefully someone can help me with this or at least give me some sort of direction on where to start.
Hi
@1:
you can use the split function with an empty string as attribute: string.split(""); put this into a variable and check every index of the array with a switch expression:
Code:
var a = "Hello World";
var b = a.split("");
for(i in b){
switch(b[i]){
case "a": ....; break;
case "b": ....; break;
.....
}
}
@2: once again use split(), go trough the array and use string.length for comparision
So would this count the string correctly for both?
Code:
var counter = new Array(26);
counter = [ ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
var counter2 = new Array()
counter2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,];
var a = "hello world";//user input test
var b = a.split("");//Split at each character
var c = a.split(" ");//Split at spaces
for (var i in b){
switch(b[i]){
case "a": ++counter[1]; break;
case "b": ++counter[2]; break;
case "c": ++counter[3]; break;
case "d": ++counter[4]; break;
case "e": ++counter[5]; break;
case "f": ++counter[6]; break;
case "g": ++counter[7]; break;
case "h": ++counter[8]; break;
case "i": ++counter[9]; break;
case "j": ++counter[10]; break;
case "k": ++counter[11]; break;
case "l": ++counter[12]; break;
case "m": ++counter[13]; break;
case "n": ++counter[14]; break;
case "o": ++counter[15]; break;
case "p": ++counter[16]; break;
case "q": ++counter[17]; break;
case "r": ++counter[18]; break;
case "s": ++counter[19]; break;
case "t": ++counter[20]; break;
case "u": ++counter[21]; break;
case "v": ++counter[22]; break;
case "w": ++counter[23]; break;
case "x": ++counter[24]; break;
case "y": ++counter[25]; break;
case "z": ++counter[26]; break;
}
}
for (var j in c){
switch(c[j]){
case a.length=1: ++counter2[0]; break;
case a.length=2: ++counter2[1]; break;
case a.length=3: ++counter2[2]; break;
case a.length=4: ++counter2[3]; break;
case a.length=5: ++counter2[4]; break;
case a.length=6: ++counter2[5]; break;
case a.length=7: ++counter2[6]; break;
case a.length=8: ++counter2[7]; break;
case a.length=9: ++counter2[8]; break;
case a.length=10: ++counter2[9]; break;
case a.length=11: ++counter2[10]; break;
case a.length=12: ++counter2[11]; break;
case a.length=13: ++counter2[12]; break;
case a.length=14: ++counter2[13]; break;
case a.length=15: ++counter2[14]; break;
case a.length=16: ++counter2[15]; break;
case a.length=17: ++counter2[16]; break;
case a.length=18: ++counter2[17]; break;
case a.length=19: ++counter2[18]; break;
case a.length=20: ++counter2[19]; break;
case a.length=21: ++counter2[20]; break;
case a.length=22: ++counter2[21]; break;
case a.length=23: ++counter2[22]; break;
case a.length=24: ++counter2[23]; break;
}
}
first one should basically work.
within the second one you may misunderstood me.
I meant the following:
Code:
var len = 5;
for(var i in words){
if(words[i].length == len)
counter++;
}
I'm not sure if I follow the var len = 5. What if there is a different sentence such as "My name is jon doe". Now we have 2(2),3(2) and 4(1) character words. how would this work in that case? should var len be an Array instead?
ok sorry I misunderstood you, the way with the array is not very effective because you have a limited amount of lengths available. But it's the simplest. Your switch is wrong.
Code:
for (var j in c){
switch(c[j].length){
case 1: ++counter2[0]; break;
ok so how about this. Do you think the counters will be right now?
Code:
var counter = new Array(26);
counter = [ ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
var counter2 = new Array();
counter2 = [ ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
var string = "hello world";//user input test
var letters = string.split("");//Split at each character
var words = string.split(" ");//Split at spaces
for (var i in letters){
switch(letters[i]){
case "a": ++counter[1]; break;
case "b": ++counter[2]; break;
case "c": ++counter[3]; break;
case "d": ++counter[4]; break;
case "e": ++counter[5]; break;
case "f": ++counter[6]; break;
case "g": ++counter[7]; break;
case "h": ++counter[8]; break;
case "i": ++counter[9]; break;
case "j": ++counter[10]; break;
case "k": ++counter[11]; break;
case "l": ++counter[12]; break;
case "m": ++counter[13]; break;
case "n": ++counter[14]; break;
case "o": ++counter[15]; break;
case "p": ++counter[16]; break;
case "q": ++counter[17]; break;
case "r": ++counter[18]; break;
case "s": ++counter[19]; break;
case "t": ++counter[20]; break;
case "u": ++counter[21]; break;
case "v": ++counter[22]; break;
case "w": ++counter[23]; break;
case "x": ++counter[24]; break;
case "y": ++counter[25]; break;
case "z": ++counter[26]; break;
}
}
for (var j in words){
switch(words[j].length){
case 1: ++counter2[0]; break;
case 2: ++counter2[1]; break;
case 3: ++counter2[2]; break;
case 4: ++counter2[3]; break;
case 5: ++counter2[4]; break;
case 6: ++counter2[5]; break;
case 7: ++counter2[6]; break;
case 8: ++counter2[7]; break;
case 9: ++counter2[8]; break;
case 10: ++counter2[9]; break;
case 11: ++counter2[10]; break;
case 12: ++counter2[11]; break;
case 13: ++counter2[12]; break;
case 14: ++counter2[13]; break;
case 15: ++counter2[14]; break;
case 16: ++counter2[15]; break;
case 17: ++counter2[16]; break;
case 18: ++counter2[17]; break;
case 19: ++counter2[18]; break;
case 20: ++counter2[19]; break;
case 21: ++counter2[20]; break;
case 22: ++counter2[21]; break;
case 23: ++counter2[22]; break;
case 24: ++counter2[23]; break;
case 25: ++counter2[24]; break;
case 26: ++counter2[25]; break;
case 28: ++counter2[26]; break;
}
}
Could be as simple as that (on using Regular Expressions):
Code:
function counter(string){
var ch=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
var NC={}, NW=string.length, reg, i;
for(i=0;i<ch.length;i++){// build an object "character:occurance"
reg=new RegExp(ch[i],'gi');
NC[ch[i]]=string.match(reg)?string.match(reg).length:0;
}
NW=string.match(/\b/g)?string.match(/\b/g).length/2:string.length;//words counter
return [NC,NW]
}
Here's an example:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>untitled</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
function counter(string){
var ch=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
var NC={}, NW=string.length, reg, i;
for(i=0;i<ch.length;i++){// build an object "character:occurance"
reg=new RegExp(ch[i],'gi');// global and case insensitive
NC[ch[i]]=string.match(reg)?string.match(reg).length:0;
}
NW=string.match(/\b/g)?string.match(/\b/g).length/2:string.length;//words counter using the boundary mark
return [NC,NW]
}
function results(string){
var NC=counter(string)[0];
var NW=counter(string)[1];
var chTXT='', woTXT='Number of words is: '+NW;
for(c in NC){
chTXT+=c+'='+NC[c]+'<br>';
}
document.getElementById('characters').innerHTML=chTXT;
document.getElementById('words').innerHTML=woTXT;
}
</script>
</head>
<body>
<form action="">
<input type="text" name="inp"><input type="button" value="Count" onclick="results(inp.value)">
</form>
<div id="characters"></div>
<br>
<div id="words"></div>
</body>
</html>
Thanks, that works good but I don't quite understand it. Since this is for an assignment in my class I need to comment everything and I need to use stuff that I've used so far. Is there anyway to do it similar to what I have so far? Also how would I output this properly?
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
var counter = new Array(26);
counter = [ ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
var counter2 = new Array();
counter2 = [ ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
var letters = string.split("");//Split at each character
var words = string.split(" ");//Split at spaces
function gen(){
//User input string
var userInput = document.getElementById("inputField");
userInput.toLowerCase();
for (var i in letters){
switch(letters[i]){
case "a": ++counter[1]; break;
case "b": ++counter[2]; break;
case "c": ++counter[3]; break;
case "d": ++counter[4]; break;
case "e": ++counter[5]; break;
case "f": ++counter[6]; break;
case "g": ++counter[7]; break;
case "h": ++counter[8]; break;
case "i": ++counter[9]; break;
case "j": ++counter[10]; break;
case "k": ++counter[11]; break;
case "l": ++counter[12]; break;
case "m": ++counter[13]; break;
case "n": ++counter[14]; break;
case "o": ++counter[15]; break;
case "p": ++counter[16]; break;
case "q": ++counter[17]; break;
case "r": ++counter[18]; break;
case "s": ++counter[19]; break;
case "t": ++counter[20]; break;
case "u": ++counter[21]; break;
case "v": ++counter[22]; break;
case "w": ++counter[23]; break;
case "x": ++counter[24]; break;
case "y": ++counter[25]; break;
case "z": ++counter[26]; break;
}
}
for (var j in words){
switch(words[j].length){
case 2: ++counter2 [1]; break;
case 3: ++counter2 [2]; break;
case 4: ++counter2 [3]; break;
case 5: ++counter2 [4]; break;
case 6: ++counter2 [5]; break;
case 7: ++counter2 [6]; break;
case 8: ++counter2 [7]; break;
case 9: ++counter2 [8]; break;
case 10: ++counter2[9]; break;
case 11: ++counter2[10]; break;
case 12: ++counter2[11]; break;
case 13: ++counter2[12]; break;
case 14: ++counter2[13]; break;
case 15: ++counter2[14]; break;
case 16: ++counter2[15]; break;
case 17: ++counter2[16]; break;
case 18: ++counter2[17]; break;
case 19: ++counter2[18]; break;
case 20: ++counter2[19]; break;
case 21: ++counter2[20]; break;
case 22: ++counter2[21]; break;
case 23: ++counter2[22]; break;
case 24: ++counter2[23]; break;
case 25: ++counter2[24]; break;
case 26: ++counter2[25]; break;
case 28: ++counter2[26]; break;
}
}
}
//-->
</script>
</head>
<body>
<form action="" method="get">
<input id="inputField" type="text" /><input name="Analyze" type="button" value="Analyze" onclick="gen()" />
</form>
</body>
</html>
Bookmarks