JS高效关键字搜索---转
原文地址: http://www.cnblogs.com/index-html/archive/2013/04/17/js_keyword_match.html
重点关注评论中的代码..
var treeSearch = {
makeTree: function (strKeys) {
"use strict" ;
var tblCur = {},
tblRoot,
key,
str_key,
Length,
j,
i
;
tblRoot = tblCur;
for ( j = strKeys.length - 1; j >= 0; j -= 1) {
str_key = strKeys[j];
Length = str_key.length;
for ( i = 0; i < Length; i += 1) {
key = str_key.charAt(i);
if (tblCur.hasOwnProperty(key)) { //生成子节点
tblCur = tblCur[key];
} else {
tblCur = tblCur[key] = {};
}
}
tblCur.end = true ; //最后一个关键字没有分割符
tblCur = tblRoot;
}
return tblRoot;
},
search: function (content, tblRoot) {
"use strict" ;
var tblCur,
p_star = 0,
n = content.length,
p_end,
match, //是否找到匹配
match_key,
match_str,
arrMatch = [], //存储结果
arrLength = 0 //arrMatch的长度索引
;
while (p_star < n) {
tblCur = tblRoot; //回溯至根部
p_end = p_star;
match_str = "" ;
match = false ;
do {
match_key = content.charAt(p_end);
if (!(tblCur = tblCur[match_key])) { //本次匹配结束
p_star += 1;
break ;
} else {
match_str += match_key;
}
p_end += 1;
if (tblCur.end === true ) //是否匹配到尾部 //找到匹配关键字
{
match = true ;
}
} while ( true );
if (match === true ) { //最大匹配
arrMatch[arrLength] = { //增强可读性
key: match_str,
begin: p_star - 1,
end: p_end
};
arrLength += 1;
p_star = p_end;
}
}
return arrMatch;
}
};
|
使用实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function test(strContent, strKeys) {
var arrMatch,
tblRoot = treeSearch.makeTree(strKeys),
t = new Date();
arrMatch = treeSearch.search(strContent, tblRoot);
console.log( "time is: " + ( new Date() - t) + "mm" );
console.log(arrMatch);
}
var s = ( function () {
var Things = [ ' ' , '\n' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' ];
var s = "" ;
for ( var i = 1000000; i >= 0; i--) {
s += Things[parseInt(Math.random() * Things.length) % Things.length]
};
return s;
})()
test(s, [ "abc" , "efge" , "fun" , "tree" ]);
|
转载于:https://www.cnblogs.com/ry123/archive/2013/04/24/3039720.html
JS高效关键字搜索---转相关推荐
- 关键字搜索软件_高效搜索神器,你选listary还是火柴?
本文预计阅读5分钟. 你的电脑桌面是否杂乱不堪呢? 是不是打开特定的文件,每次都要一级一级的打开目录呢? 试想这样一个场景,你需要找一个文件,你只记得它的名字,但你不记得它在什么位置了,这时你该怎么办 ...
- JS——运用JSONP技术完成百度关键字搜索
百度关键字搜索 接口地址:https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=&cb=fn 效果图: 代码如下: <!DOCT ...
- QQ音乐关键字搜索并生成下载url
QQ音乐关键字搜索并生成下载url 1. 获取搜索的歌单信息 通过在QQ音乐进行关键字搜索,并通过F12检测,发现网页给网站https://c.y.qq.com/soso/fcgi-bin/cli ...
- layui 带按钮的搜索框_layui table可输入关键字搜索下拉框(select)
layui-table-column-select 在layui table的基础上对表格列进行扩展:点击单元格显示可搜索下拉列表. 一.介绍 此项目是为了解决layui table表格单元格(col ...
- 如何高效的搜索github上面的资源
如何高效的搜索github上面的资源 首先简单介绍一下github上一个项目主页具体包含了哪些信息,搜索的时候也会涉及到这些信息. 我们以搜索CTR(点击率预估)为例的话: 1.头铁型搜索:直接在搜索 ...
- vue高德地图实现关键字搜索
高德地图准备工作 安装amap cnpm国内安装比npm更快些: cnpm install vue-amap --save main.js 配置amap的基础配置项 import GaodeMap f ...
- js实现关键字匹配高亮显示
JS实现搜索关键字匹配高亮显示 首先看效果 需求:用户输入文字之后,调用后台接口查询匹配关键字(模糊搜索),并把匹配到的关键字进行高亮显示. 实现思路:将拿到的数据进行拆分,例如:用户输入" ...
- 使用HttpClient和Jsoup爬取京东商城关键字搜索的商品页面
使用HttpClient可以创建浏览器对象,然后对页面数据进行抓取,另外再使用Jsoup库解析Html页面.因为Jsoup和JQuery一样有选择器获取元素的方式,所以抓取页面数据变得非常方便. 例如 ...
- 静态html页面关键字搜索高亮
静态html页面关键字搜索高亮 最近项目要实现一个页面关键字搜索,刚好上网找了一款不错的插件,叫mark.js,官网地址,下面演示一个基于jq的案列,这个插件可以不依赖任何插件也可以实现这个功能,详情 ...
最新文章
- 吞吐量-Corda的故事
- java代码 创建文件夹的方法
- python之django中models学习总结
- 嵌入式视频采集编程思路(Video 4 Linux)-转
- 虚拟局域网(VLAN)中端口tagged和untagged在多种情况下的作用
- 台式计算机硬盘序号,[硬盘序列号的查看方法]台式机查看序列号的方法
- word绿豆沙颜色设置_Win7系统下将txt和word背景颜色设置为豆沙绿的方法
- OpenSSL 常用函数——证书操作
- 桃李春风一杯酒,江湖夜雨十年灯。
- 拳皇FANS们不得不看的动画
- K-mean clustering(K均值聚类算法)
- Ubuntu fastboot 烧写
- winedit使用教程_基础教程:BCDEDIT常用命令及使用实例(图)
- 十年期国债利率倒数与A股PE中位数走势
- 空间大战java_回忆S60(塞班)年代的JAVA游戏:有没有哪一款是你在课堂偷偷玩的?...
- 2019年7月训练记录(更新ing)
- 【号外】支付宝小程序,惊呆我的小伙伴
- 邢台职业技术学院计算机学费,邢台职业技术学院各专业学费标准
- 字重font-weight--没有UI的前端er
- 转载:自动驾驶之软件定义汽车