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 に答える