Word Placements

by vzufelt

HTML

<form id="form">Enter Phrase.
  <br>
  <textarea id='phrase' rows='10' cols='50'>I want what I want and I know what I want</textarea>
  <br>
  <input type="button" class="myButton" value="Parse Phrase" id="parse" onClick='parsePhrase();' />
</form>
<h3>
  Output:
</h3>
<div id="output"></div>

JavaScript

var hashTable = new HashTable();

function parsePhrase() {
  hashTable.clear();
  var phrase = document.getElementById("phrase").value;
  var phraseAsStringArray = phrase.split(" ");
  var len = phraseAsStringArray.length;

  for (var i = 0; i < len; i++) {
    hashTable.addWord(phraseAsStringArray[i], i + 1);
  }
  document.getElementById("output").innerHTML = hashTable.print();
}

function HashTable(obj) {
  this.bins = {};
  this.length = 0;
  for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
      this.bins[p] = obj[p];
      this.length++;
    }
  }

  this.addWord = function(word, index) {
    if (this.hasWord(word)) {
      this.addExistingWord(word, index);
    } else {
      this.addNewWord(word, index);
    }
    return word;
  }

  this.hasWord = function(word) {
    return this.bins.hasOwnProperty(word);
  }

  this.addNewWord = function(word, index) {
    this.bins[word] = index;
    this.length++;
    return word;
  }

  this.addExistingWord = function(word, index) {
    var current = this.bins[word];
    this.bins[word] = current + " " + index;
    return word;
  }

  this.print = function() {
    var str = "";

    for (var w in this.bins) {
      if (this.hasWord(w)) {
        str = str + w + ": " + this.bins[w] + "<br/>";
      }
    }
    return str;
  }

  this.clear = function() {
    this.bins = {};
    this.length = 0;
  }
}