我想计算文本区域的单词,字符和行数.这是我的代码:这样做是否完美?
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)
有任何更正?
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)
虽然它可能工作正常,但是你做事的方式还有一些更天生的问题.
首先,您使用的是全局变量(或者至少不是局部变量).您的函数依赖于textarea变量,该变量在函数外部定义,因此不灵活且难以测试.相反,为什么不接受textarea元素来检查?或者甚至更好,而不是操作元素,操作字符串?这在概念上会更有意义(统计数据不是元素,而是价值),并创建更灵活的代码.
其次,你的功能含糊不清.getStats?获取什么统计数据?这些统计数据是什么?他们是24岁男性的平均身高吗?将函数重命名为更有意义的函数将极大地改进它.
第三,你的函数做两件事:它既计算textarea的统计数据,然后用字符串格式化它们.但是,如果不是那个字符串,你想要它以不同的格式呢?或者只是行数,而不是其他什么?而不是返回一个字符串,为什么不返回一个数据结构(一个简单的对象),里面有这些统计信息?这样您就可以以任何方式格式化数据.
第四,你对一个单词的定义有点......奇怪.定义一个单词很难,你的定义说.(和其他人)本身就是一个单词,所以hello !用两个单词而不是一个单词来表示.那是对的吗?
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |