获取textarea的统计信息(单词,行,字符)

b13*_*692 0 javascript

我想计算文本区域的单词,字符和行数.这是我的代码:这样做是否完美?

function getStats() {
  var text = textarea.value,
    chars = text.length,
    words = text.split(/\S+/g).length - 1,
    lines = text.split("\n").length;
  return lines + " lines, " + words + " words, " + chars + " chars";
}
Run Code Online (Sandbox Code Playgroud)

有任何更正?

Rav*_*eja 5

function getStats() {
  var text = textarea.value,
    chars = text.length,
    words = text.split(/\s+/g).length,
    lines = text.split("\n").length;
  return lines + " lines, " + words + " words, " + chars + " chars";
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常.您可以通过执行以下操作来优化代码:

   words = text.split(/s+/g).length 
Run Code Online (Sandbox Code Playgroud)

代替

  words = text.split(/S+/g).length - 1;
Run Code Online (Sandbox Code Playgroud)


Zir*_*rak 5

虽然它可能工作正常,但是你做事的方式还有一些更天生的问题.

首先,您使用的是全局变量(或者至少不是局部变量).您的函数依赖于textarea变量,该变量在函数外部定义,因此不灵活且难以测试.相反,为什么不接受textarea元素来检查?或者甚至更好,而不是操作元素,操作字符串?这在概念上会更有意义(统计数据不是元素,而是价值),并创建更灵活的代码.

其次,你的功能含糊不清.getStats?获取什么统计数据?这些统计数据是什么?他们是24岁男性的平均身高吗?将函数重命名为更有意义的函数将极大地改进它.

第三,你的函数做两件事:它既计算textarea的统计数据,然后用字符串格式化它们.但是,如果不是那个字符串,你想要它以不同的格式呢?或者只是行数,而不是其他什么?而不是返回一个字符串,为什么不返回一个数据结构(一个简单的对象),里面有这些统计信息?这样您就可以以任何方式格式化数据.

第四,你对一个单词的定义有点......奇怪.定义一个单词很难,你的定义说.(和其他人)本身就是一个单词,所以hello !用两个单词而不是一个单词来表示.那是对的吗?