Javascript高阶函数和DOM

时间:2015-11-30 19:12:47

标签: javascript dom higher-order-functions

我正在开发一个项目,该项目接收用户在文本框中输入的文本并返回最常用的单词。

使用Javascript:

var bestMode = 1;
var currentMode = 0;
var character;

function Find_Word(){
  var words = document.getElementById('words').innerText;
  var punctuationless = words.replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
  var finalString = punctuationless.replace(/\s{2,}/g," ");
  var WordList = finalString.split(" ");
  return FindMode(WordList);
}

function FindMode(WordList){
  for(var i=0; i<WordList.length; i++){
    for(var m=i; m<WordList.length; m++){
      if(WordList[i] == WordList[m]){
        currentMode += 1;
      }
      if(bestMode<currentMode){
        bestMode = currentMode;
        character = WordList[i];
      }
    }
    currentMode = 0;
  }
}
console.log(bestMode);

HTML:

<html>
<body>
  <h1>Most common word used</h1>
  <input type="text" id="words" rows="10" columns="30"></input>
  <button type="button" id="FindWord" onclick="Find_Word()">Find Word</button>
<script src="CommonWord.js"> </script>
</body>
</html>

我无法弄清楚的是将文本框中的文本作为一个字符串拉入变量的正确方法。我的函数Find_Word在按下按钮时获取接收到的字符串并删除标点符号,并在字符串中为每个单词保留一个数组WordList。

之后,我也无法理解如何将该数组传递到我的第二个函数findMode,在那里我迭代遍历数组的每个值以找到最常见的单词。它保存在变量bestMode中。

1 个答案:

答案 0 :(得分:0)

看起来好像你正在获取当前文本并正确传递数组(尽管你可能应该使用.value属性获取文本框值)。你到底有什么问题?我不确定FindMode应该做什么。

这是一些基于你发布的内容的脚本&#34;单词&#34;根据他们出现的频率:

(function(w) {
    w.Sort_Words = function(words) {
        var o = {}, l = [];
        for(var i=0; i<words.length; i++) {
            if (typeof o[words[i]] === 'undefined') {
                o[words[i]] = 0;
                l.push(words[i]);
            }
            o[words[i]] ++;
        }
        l.sort(function(a, b) { return o[b] - o[a]; });
        return l;
    };

    w.Find_Word = function() {
        var text = document.getElementById('words').value;
        var words = text.replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"").replace(/\s{2,}/g," ").split(' ');
        var sorted = w.Sort_Words(words);
        document.getElementById('results').innerText = sorted.length === 0 ?
            'You must type at least one word' : 
            'The most commonly used word was: ' + sorted[0];
    };
})(window);

Fiddler:http://jsfiddle.net/4u1mv20h/4/