我正在尝试使用该match方法计算较长文本中每个单词的出现次数,但不是result我只得到一个错误:
无法读取 null 的属性“长度”
我的函数如下所示:
const myText = "cat dog stop rain cat"
myText.split(" ").forEach((word) => {
const numberOfOccurrences = myText.match(/word/g).length
console.log(`${word} - ${numberOfOccurrences}`)
})Run Code Online (Sandbox Code Playgroud)
我怎样才能修复它以获得正确的结果?
正则表达式字面上匹配word,因为变量word从未被指示。在字符串中找不到匹配项,myText因此它为空,因此出现错误。像这样尝试:
myText.match(new RegExp(word, "g")).length
Run Code Online (Sandbox Code Playgroud)
这使用RegExp构造函数,它接受两个参数:模式和标志。以上将传递的实际值word而不是文字word和标志g。它相当于/word/gexceptword与word传递的内容正确匹配。请参阅以下代码段:
myText.match(new RegExp(word, "g")).length
Run Code Online (Sandbox Code Playgroud)
正如其他人指出的那样,有更好的方法来做到这一点。上面代码的输出输出了cat两次,因为它出现了两次。我建议将您的计数保存在一个对象中并在每次通过时更新计数,易卜拉欣·马里尔在他们的回答中显示了这一点。这个想法是用来reduce迭代分割数组,并用一个空对象的初始值来减少。然后,用单词的计数加一更新空对象,初始计数为零。
| 归档时间: |
|
| 查看次数: |
6730 次 |
| 最近记录: |