获取文本区域(单词、行、字符)的统计信息



我想计算文本区域的单词、字符和行数。这是我的代码:这非常适合这样做吗?

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";
}

有什么更正吗?

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

首先,您使用的是全局变量(或至少不是局部变量)。您的函数依赖于在函数外部定义的textarea变量,因此不灵活且更难测试。相反,为什么不只接受一个文本区域元素来检查呢?或者更好的是,不是对元素进行操作,而是对字符串进行操作?这在概念上更有意义(统计信息不是元素的,而是其值的),并创建更灵活的代码。

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

第三,您的函数执行两件事:它既计算文本区域的统计信息,又将它们格式化为字符串。但是,如果您希望它采用不同的格式,而不是该字符串怎么办?或者只是行数,而不是其他任何东西?与其返回字符串,为什么不返回一个数据结构(一个简单的对象),其中包含这些统计信息?这样,您就可以以所需的任何方式格式化数据。

第四,你对一个词的定义有点...奇怪。定义一个词已经够困难的了,你的定义说.(和其他人)本身就是一个词,所以hello !是由两个词组成的,而不是一个词。这是对的吗?

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";
}

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

   words = text.split(/s+/g).length 

而不是

  words = text.split(/S+/g).length - 1;

您可以将textarea id传递给函数。

function getStats(textarea) {
  var text = document.getElementById(textarea).value,
    chars = text.length,
    words = text.split(/S+/g).length - 1,
    lines = text.split("n").length;
  return lines + " lines, " + words + " words, " + chars + " chars";
}

就个人而言,我想用字符、单词和行而不是像字符串这样的字符串返回object

function getStats(textarea) {
    var text = document.getElementById(textarea).value;
    return {
        chars : text.length,
        words : text.split(/S+/g).length - 1,
        lines : text.split("n").length
    }
}

您可以使用小型 JavaScript 代码实现上述功能,

请查看此链接:www.jsfiddle.net/MrbUK/

参考链接: http://textmechanic.co/Count-Text.html

对于行数计数: Textarea.value.split(//).长度

最新更新