2

我已经编写了这个函数(它不起作用),它应该计算全局变量(paraText)中的字母,然后将其插入到计数中。我该如何解决这个问题?

这是一个学校项目,所以我必须遵守某些规则。我已经尝试了几乎所有的答案,但我无法让它工作:(也许如果你看看所有的代码你会发现我做错了什么。

        "use strict";

    var paraText = "";
    var antalParagrafer = 0;

    function addLetter(c) {
        if(!paraText) {
            addParagraph();
        }
        else { //add c to saved textnode
            var tNod = document.createTextNode(c);
            paraText.appendChild(tNod);
    }
    }
        //function is called when enter is pressed
    function addParagraph() {
 /*create a new paragraph with related textnode
    textnode is saved to the global textnodevariable
    add paragraph to the div with id "output"
    you also need to mark the paragraph with the class even/odd
    depending on the class of the previous paragraph*/
        var div = document.getElementById("output");
        var nyParagraf = document.createElement("p");
        div.appendChild(nyParagraf);
        antalParagrafer += 1;
        nyParagraf.className = (antalParagrafer % 2 === 0 ? 'even' : 'odd');
        paraText = nyParagraf;
    }
    //function is called when count letters is pressed
           function countLetters() {
      var count=0;
      for(var i = 0; i < paraText.length; i++) {
        var c = paraText.charAt(i);
        if (c >= 'a' && c <= 'z') count++;
      }
      return count;
    }
4

3 回答 3

9

我只是去掉非字母,然后使用剩下的长度:

var count = paraText.replace(/[^a-zA-Z]/g, '').length;
于 2012-08-11T14:21:11.763 回答
4

你的函数可以正常工作(尽管它可能没有它应该的那么优雅),但是count = count ++是错误的;要么使用

count++;

或者

count = count + 1;
于 2012-08-11T14:22:56.567 回答
1

该语句count = count++不会增加计数器,因为 的值count++是变量增加之前的值,所以您增加变量,然后将之前的值重新赋值。

使用简单的比较比对字符串中的每个字符使用正则表达式提供更好的性能:

function countLetters() {
  var count=0;
  for(var i = 0; i < paraText.length; i++) {
    var c = paraText.charAt(i);
    if (c >= 'a' && c <= 'z') count++;
  }
  return count;
}
于 2012-08-11T14:28:32.333 回答