0

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

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

有什么更正吗?

4

4 回答 4

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

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

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

代替

  words = text.split(/S+/g).length - 1;
于 2013-10-26T06:39:03.667 回答
5

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

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

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

第三,你的函数做了两件事:它计算 textarea 的统计数据,然后将它们格式化为字符串。但是,如果您想要不同的格式而不是那个字符串怎么办?或者只是行数,没有别的?为什么不返回一个字符串,而不是返回一个数据结构(一个简单的对象),其中包含这些统计信息?这样,您可以以任何您想要的方式格式化数据。

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

于 2013-10-26T07:05:41.230 回答
2

您可以传递idtextarea函数。

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
    }
}
于 2013-10-26T06:35:16.320 回答
1

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

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

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

对于行数计数:Textarea.value.split(/\n/).Length

于 2013-10-26T06:37:15.953 回答