我试图用长字符串计算每个句子中的单词。我得到的只是句子的数量。我在C#和Ruby中找到了一些解决方案,但它们不适合我: - ))
我是java-script的新手。任何帮助非常感谢。以下代码:
输出结果如下:
单词:1发送:1 单词:0 in sent:2 单词:1 in sent:3 单词:1 in sent:4 单词:1发送:5 单词:1 in sent:6
字计数器没有增加!最有可能的是它很简单。 提前谢谢。
var text1 = $('#textarea1').val();
var gaps = [];
var wordsC = 0;
var wordsTot = 0;
var tempC = 0;
var sents = text1.split('.');
for (var elem in sents)
{
tempC += 1;
wordsC = elem.split(" ").length;
wordsTot += wordsC;
if (tempC == 2) {
wordsC -= 1;
wordsTot -= 1;
}
document.write("<br />Words: " + wordsC + " |in sent: " + tempC + " sent");
};
document.write("<br />words total : " + wordsTot + "<br />" );
答案 0 :(得分:1)
您不应该使用for...in
枚举数组。 text1.split('.');
正在生成一个数组,您尝试使用for...in
进行枚举。在elem
的每次迭代中for...in
的值是作为字符串的数组索引之一(&#39; 0&#39;在第一次迭代中,&#39; 1&#39;在第二个等等)。您甚至会最终获得一些Array原型方法以及原型更改的其他内容。
对于ES6之前的环境,请尝试:
for (var i = 0; i < sents.length; i++)
{
tempC += 1;
wordsC = sents[i].split(" ").length;
wordsTot += wordsC;
if (tempC == 2) {
wordsC -= 1;
wordsTot -= 1;
}
document.write("<br />Words: " + wordsC + " |in sent: " + tempC + " sent");
}
ES6引入了一个for...of
构造,可以完成您尝试做的事情:
for (let elem of sents)
{
tempC += 1;
wordsC = elem.split(" ").length;
wordsTot += wordsC;
if (tempC == 2) {
wordsC -= 1;
wordsTot -= 1;
}
document.write("<br />Words: " + wordsC + " |in sent: " + tempC + " sent");
};
答案 1 :(得分:1)
var str = "There are five words here. I like turtles a lot. This is five words long. Yep.";
var split = str.split(".");
var amountOfSentences = str.charAt(str.length - 1) == "." ? split.length : split.length + 1;
var total = 0;
for (i = 0; i < amountOfSentences - 1; i++) {
$("body").append("Sentence " + (i + 1) + ": ");
for (j = 0; j < split[i].split(" ").length - 1; j++) {
total++;
}
if (i == 0) total++;
$("body").append(" " + total + "<br />");
total = 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这里有五个字。我非常喜欢海龟。这是五个字长。是的。
这将输出:
句子1:5
句2:5
句3:5
句子4:1
句子的结尾可以以点结尾,不重要(在var amountOfSentences
中考虑)。这对你有用吗?