/    Sign up×
Community /Pin to ProfileBookmark

analyze text with objects

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.

    to post a comment
    JavaScript

    8 Comments(s)

    Copy linkTweet thisAlerts:
    @Specht08Nov 29.2009 — 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;
    .....
    }
    }
    [/CODE]

    @2: once again use split(), go trough the array and use string.length for comparision
    Copy linkTweet thisAlerts:
    @scheric1authorNov 29.2009 — 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;
    }
    }
    [/CODE]
    Copy linkTweet thisAlerts:
    @Specht08Nov 29.2009 — first one should basically work.

    within the second one you may misunderstood me.

    I meant the following:
    [CODE]
    var string = "Hello World";
    var words = string.split(" ");
    var len = 5;
    var counter = 0;
    for(var i in words){
    if(words[i].length == len)
    counter++;
    }
    [/CODE]
    Copy linkTweet thisAlerts:
    @scheric1authorNov 29.2009 — 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++;
    }
    [/CODE]
    [/QUOTE]


    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?
    Copy linkTweet thisAlerts:
    @Specht08Nov 29.2009 — 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;
    [/CODE]
    Copy linkTweet thisAlerts:
    @scheric1authorNov 29.2009 — 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;
    }
    }[/CODE]
    Copy linkTweet thisAlerts:
    @KorNov 30.2009 — Could be as simple as that (on using Regular Expressions):
    <i>
    </i>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&lt;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:
    <i>
    </i>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
    &lt;html&gt;
    &lt;head&gt;
    &lt;title&gt;untitled&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
    &lt;meta http-equiv="Content-Style-Type" content="text/css"&gt;
    &lt;meta http-equiv="Content-Script-Type" content="text/javascript"&gt;
    &lt;script type="text/javascript"&gt;
    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&lt;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]+'&lt;br&gt;';
    }
    document.getElementById('characters').innerHTML=chTXT;
    document.getElementById('words').innerHTML=woTXT;
    }
    &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;form action=""&gt;
    &lt;input type="text" name="inp"&gt;&lt;input type="button" value="Count" onclick="results(inp.value)"&gt;
    &lt;/form&gt;
    &lt;div id="characters"&gt;&lt;/div&gt;
    &lt;br&gt;
    &lt;div id="words"&gt;&lt;/div&gt;
    &lt;/body&gt;
    &lt;/html&gt;

    More about Regular Expressions in Javascript:

    http://lawrence.ecorp.net/inet/samples/regexp-intro.php
    Copy linkTweet thisAlerts:
    @scheric1authorDec 01.2009 — 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>
    [/CODE]
    ×

    Success!

    Help @scheric1 spread the word by sharing this article on Twitter...

    Tweet This
    Sign in
    Forgot password?
    Sign in with TwitchSign in with GithubCreate Account
    about: ({
    version: 0.1.9 BETA 5.27,
    whats_new: community page,
    up_next: more Davinci•003 tasks,
    coming_soon: events calendar,
    social: @webDeveloperHQ
    });

    legal: ({
    terms: of use,
    privacy: policy
    });
    changelog: (
    version: 0.1.9,
    notes: added community page

    version: 0.1.8,
    notes: added Davinci•003

    version: 0.1.7,
    notes: upvote answers to bounties

    version: 0.1.6,
    notes: article editor refresh
    )...
    recent_tips: (
    tipper: @AriseFacilitySolutions09,
    tipped: article
    amount: 1000 SATS,

    tipper: @Yussuf4331,
    tipped: article
    amount: 1000 SATS,

    tipper: @darkwebsites540,
    tipped: article
    amount: 10 SATS,
    )...