在字符串行中搜索速度最快
Fastest search in lines of string
我有数据行(第一行是标题,其余行是数据)作为单个参数传递我的函数:
"id,first,last,email'n" +
"555,John,Doe,jd@gmail.com'n" +
"666,Jason,scott,js@gmail.com'n" +
.......
我想在这些行中搜索电子邮件值。如果我找到它,我应该返回整行。所以我只需要在每行中查找第 4 个元素。
我在想这样的事情:
function search(data, key) {
var arr = text.split(''n'); /// convert data to array
return function (value) {
for (var i = 1; i < arr.length; i++) {
var dataLine = arr[i].split(','); /// "666,Jason,scott,js@gmail.com'n" to array
if (dataLine[keyIndex] === value) { /// found match between value and id
return "found";
}
}
return "not found";
}
}
最快的搜索方式是什么?
在每次循环迭代中将每一行转换为数组是否被视为浪费?
谢谢。
您只需要查看每个arr
项中的最后一个元素。因此,可以通过避免split()
调用来加快内部函数:
function(value) {
for (var i = 1; i < arr.length; i++) {
var item = arr[i];
if (item.substr(item.lastIndexOf(',')+1) === value) {
return "found";
}
}
return "not found";
}
顺便说一下,for 循环从 1 开始i
以忽略标头。
我会尝试像这样/^([^,]*,){3}searched@mail.xyz(,.*)?$/gi
构造正则表达式,并使用此正则表达式作为参数运行输入字符串的匹配方法。
var fieldsBefore=keyIndex?"^([^,]*,){"+keyIndex+"}":"^"
var fieldsAfter="(,.*)?$"
var rx=new RegExp(fieldsBefore+searched+fieldsAfter,"g")
var result=input.match(rx)
if(result){//lines found
...
}
else{//not found
...
}
按照丹达维斯的建议,我将函数修改为:
function search(data, key) {
var arr = text.split(''n'); /// convert data to array
return function (value) {
var arrByID = arr.filter(filterByID, value);
console.log(arrByID); /// -> ["555,John,Doe,jd@gmail.com"]
}
}
function filterByID(stringLine) {
if (stringLine.indexOf(this) > -1) {
return true;
}
}
谢谢大家的好主意!
相关文章:
- 用程序搜索JQuery数据表中的文本
- 在html Select中添加搜索
- Ajax Live搜索发布到Laravel视图
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- 学生搜索项目jquery/javascript
- 用于搜索的聚合物嵌套绑定
- 在javascript中搜索具有重复值的两个数组中的匹配值
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 使用javascript搜索具有用户输入的数组
- 淘汰搜索/筛选
- Wacom stu-430签名捕获速度太慢
- 搜索api在mac上显示对话框
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- 谷歌水印未显示在自定义搜索框中
- 在javascript中搜索项目列表的性能
- 正在搜索JavaScript日期选择器滑块
- 如何在速度模板中获取LiferayPortlet实例id
- 搜索&LazyLoad可以'打字速度跟不上
- 搜索有关速度/效率的 JSON 对象
- 在字符串行中搜索速度最快