如何在一个大型网页上获取独特的单词(至少是一个独特单词的样本)
How to get the unique words on a large webpage (at least a sample of unique words)?
我正在尝试处理非常大的页面的可见文本,例如,这个页面上的整个Orwell的"1984",但当我尝试以下操作时,我的Chrome控制台似乎崩溃了。
var script = document.createElement('script');
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(script);
var allWords = $(document.body).children(":visible").text().split(' ');
var uniqueWords = allWords.filter(function(elem, i, array){ return array.indexOf(elem) === i });
以上情况使我的Chrome选项卡在最后一次操作时变得没有响应(我输入的新命令的输出至少会停止一分钟)。注意:代码片段的第一部分只是将JQuery附加到页面上。
你会如何更快地处理这样的大字符串?你认为我应该从allWords
中随机采样,只对这个较小的字符串应用filter函数吗。
chrome选项卡在最后一行执行后挂起的原因是算法的复杂性。不需要对每个单词调用.indexOf
,只需将每个单词添加到Set 中即可
var uniqueWords = new Set();
allWords.forEach(function (word) {
uniqueWords.add(word)
});
如果您需要ES5版本的相同代码,您可以使用helper对象作为数据存储。对象键本质上是唯一的,所以你可以用单词作为键填充空对象,用值填充你想要的任何东西,然后用Object.keys
方法提取单词
var uniqueWordsHash = {};
allWords.reduce(function (hash, word) {
hash[word] = null;
return hash;
}, uniqueWordsHash);
var uniqueWordsArray = Object.keys(uniqueWordsHash);
相关文章:
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 如何创建一个“;表单弹出框“;在chrome中右键单击时位于突出显示的单词上方
- 从输入值中删除最后一个单词
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- 当两个单独的单词被放在目标上时,使用Jquery获取一个值
- 在表单中创建一个黑名单过滤器以避免某些单词
- 如何查找一个单词在动态创建的html表行中出现的次数
- Regex或javascript每X个连续单词中有一个单词
- Javascript:当这个单词被点击5次时,下面会显示另一个单词
- Javascript/jQuery替换tamil语言输入框中的最后一个单词
- AJAX数据包含一个或多个单词.
- 如何使用d3.layout.cloud.js创建一个包含单词及其权重的csv的单词云
- Javascript-在一个数组中搜索整个单词,并创建一个符合条件的新数组
- Javascript(如果var包含一个单词,则仅更改该单词的颜色)
- 为什么javascript函数名称custom是一个小写的单词,后跟一个大写的单词,就像'orangeCost'一样
- 使用Javascript双击HTML中的空格时,选择上一个和下一个单词
- 检查字符串是否等于一个单词和一个数字
- 有没有一个网站可以生成所有可能的显示单词的方式
- Regex:使用javascript测试最后一个单词后的url中是否存在最后一个斜杠