js 数组快速查询指定字符串方法

有一个动态数组,[adfjsf,ad2fjsf,adf32jsf,ad4fjsf,ad523fjsf,a523dfjsf,ad423fjsf,adfjs234f,......]
我想查查数组是否有abc这个字符串,最开始js用的是for循环取出数组一个个对比,后来一想,数组如果越来越多,用for循环的话效率会很慢,就在网上搜了一下,发现两个别人写的博文,里面方法很好:
1.

JS暴虐查找法

例如在一个含500个字符串的data数组里,我们想要找到一个指定的字符(key),返回它的数组下标,如果用这样的算法:

CODE:
function usual_search(data,key)
{
var m=data.length
for(i=0;i<m;i++)
{if(data[i]==key)return i}
}

由于需要做多次的比较,运算起来会相当的慢。

本主题要介绍的是一种充分利用Jscript内置方法来实现在数组中查找数据的方法,由于借助Jscript内置方法,其效率要远优于上述常规算法。为了(诙谐|唬人)起见,我命其名为“JS暴虐查找法”。

这种查找法对于数组元素有一个要求:就是数组元素的内容不得包含半角逗号(,)及我们指定的某一个代置符号(例如,在下面的示例中,我们指定代置符号为一个制表符“┢”)。在事先构建、维护数组时要注意满足这一要求。

JS暴虐查找法的思路是非常简单的,原则只有一个,就是要“充分利用Jscript内置方法”:

我们首先利用 Array 对象的 toString() 方法产生一个包含数组元素的字符串,在这个字符串中各数组元素由半角逗号(,)分隔的,所以我们事先要求数组元素的内容不得包含半角逗号。

随后利用 String 对象的 replace() 方法将这个字符串中所包含的我们要找的关键字符串替换成我们指定的一种特殊符号(代置符号),一般选择一个不常用的字符来充当代置符号,在下面示例中我使 用了一个制表符(┢),只要是能够确保不会在数组元素中出现的符号都可以充当代置符号。

接下来就是我们最暴虐的一步了,还是用 replace() 方法,去除半角逗号(,)和代置符号(┢)以外的所有字符。统统去干净以后这个字符串就变成了一串半角逗号之中包含着一个代置符号(这模样:,,,,,,,,,,,,,,,,┢,,,,,,,,,)。

最后,用 String 对象的 indexOf() 方法返回代置符号在这个字符串中的位置,而这个位置恰恰也就是在原来数组中的数组下标。

示例代码:

<script>

function JS_cruel_search(data,key)      
{
  re = new RegExp(key,[""])
  return (data.toString().replace(re,"┢").replace(/[^,┢]/g,"")).indexOf("┢")
}

function show()
{p=DataWord.value.split(",")
 key=keyWord.value
result=JS_cruel_search(p,key)
if(result>-1){alert("“"+key+"”就在第"+(result+1)+"个位置上。")}
else{alert("没找到!")}
}
</script>
Data:<input name=DataWord readonly value="就在,你的,目光,尽头,,懵懂,的天,使单,纯如,旧,挣,扎着,不肯,涉入,俗流,,鸿鹄,借走,了他,的翅,膀,可,有谁,能助,他,飞翔?" size=120>
<p>key:<input name=keyWord readonly value="鸿鹄">
<p><button οnclick=show()>查找</button>

引用文章URL:http://moban.siteserver.cn/sites3/w3cn/contents/207/1708.html

经过验证确实可以查出

2


Array.intersect = function(a, b){
     return
a.uniquelize().each(function(o){return b.contains(o) ? o : null});
};

引用文章URL:http://hi.baidu.com/w_bobo/blog/item/e5aeac0167e2f50f1c95834f.html

没试过但看代码改改,就可以查出abc

 

还有一种方法是jQuery自带的

jQuery.grep(array,callback,[invert])

 

使用过滤函数过滤数组元素。

此函数至少传递两个参数:待过滤数组和过滤函数。过滤函数必须返回 true 以保留元素或 false 以删除元素。
过滤数组中小于 0 的元素。

jQuery 代码:

$.grep( [0,1,2], function(n,i){
  return n > 0;
});
结果:

[1, 2]

--------------------------------------------------------------------------------

排除数组中大于 0 的元素,使用第三个参数进行排除。

jQuery 代码:

$.grep( [0,1,2], function(n,i){
  return n > 0;
}, true);
结果:

[0]
经过验证也可查出abc

转载于:https://my.oschina.net/u/568577/blog/680859

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值