我仍在研究一个jQuery脚本,它在Ckeditor下输出最重复的单词列表。 不是关键字密度,而是一个单词及其重复列表,不包括英语和意大利语中的停用词,以及一些html清除。 基于Bootstrap,jQuery和Ckeditor。
我已经使这个JSFiddle示例运行良好:https://jsfiddle.net/wzh7c42f/
问题是如果我在textarea文本中的任何位置写了“map”这个词,KeyDensityShow函数引发了一个错误,并准确地在行中
word_counts[positions[word]][1]++
我没有找到解决方案或者为什么会出错。 如果有人可以帮助找到原因并提供修复或更好的优化,我将非常感激。
事先提前修改
使用提供的解决方案,我修复了我的代码并完美运行。 这是JSFiddle的功能版本:https://jsfiddle.net/09m7c2hw/
答案 0 :(得分:2)
发生错误是因为您要将密钥数组的类型与undefined
进行比较,这没有错(as we already saw here):
if (typeof positions[word] == 'undefined') {
但是,当密钥名称是保留字(如map
- 一个有效的JavaScript函数)时,它会失败,因为它总是返回函数本身,即使它不存在进入阵列。
将snipet更改为以下内容:
if (!positions.hasOwnProperty(word)) {
positions[word] = word_counts.length;
word_counts.push([word, 1]);
} else {
word_counts[positions[word]][1]++;
}
来自docs:
此方法可用于确定对象是否具有 指定属性作为该对象的直接属性; 与中的不同 运算符,此方法不会检查对象的原型 链强>