字符计数器不会打印所有字符

Character Counter won't print all Characters

本文关键字:字符 打印 计数器      更新时间:2023-09-26

我正在制作一个字符计数器作为爱好代码。到目前为止,它正在工作,但我有一个似乎无法解决的故障。当我写术语" a,b,c "时,它正确地写a:1 b:1 c:1.但是当我写" a,a,c,c"时,它只写a:2.我不确定出了什么问题。这是我代码的 JavaScript 部分(myFunction由按钮激活,testinput.value是我正在使用的文本框的值):

function myFunction() {
  var occurence = document.getElementById("testinput").value;
  var cycleOne = ["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"
  ];
  for (i = 0; i < 26; i++) {
    var counter = new RegExp(cycleOne[i], 'g');
    document.write(occurence.match(counter).length);
  }
}

它只打印2,因为在那之后立即失败并出现错误。

让我们考虑输入a,a,c,c的情况。

在循环的第一次迭代中,您将与a匹配,然后它找到两个匹配项并打印它。

在第二次迭代中,您将与b匹配,并且字符串中不存在它。因此,occurence.match(counter)将返回null,并且您正在尝试从null获得length属性。这就是为什么它抛出错误

类型错误: 无法读取 null 的属性"长度"

并停止执行。


要解决此问题,您需要检查它是否未null ,然后再继续,如下所示

  var result = occurence.match(new RegExp(cycleOne[i], 'g'));
  if (result !== null) {
    console.log(result.length);    
  }