有一个动态数组,[adfjsf,ad2fjsf,adf32jsf,ad4fjsf,ad523fjsf,a523dfjsf,ad423fjsf,adfjs234f,......]
我想查查数组是否有abc这个字符串,最开始js用的是for循环取出数组一个个对比,后来一想,数组若是愈来愈多,用for循环的话效率会很慢,就在网上搜了一下,发现两个别人写的博文,里面方法很好:
1.html
例如在一个含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暴虐查找法”。spa
这种查找法对于数组元素有一个要求:就是数组元素的内容不得包含半角逗号(,)及咱们指定的某一个代置符号(例如,在下面的示例中,咱们指定代置符号为一个制表符“┢”)。在事先构建、维护数组时要注意知足这一要求。3d
JS暴虐查找法的思路是很是简单的,原则只有一个,就是要“充分利用Jscript内置方法”:server
咱们首先利用 Array 对象的 toString() 方法产生一个包含数组元素的字符串,在这个字符串中各数组元素由半角逗号(,)分隔的,因此咱们事先要求数组元素的内容不得包含半角逗号。htm
随后利用 String 对象的 replace() 方法将这个字符串中所包含的咱们要找的关键字符串替换成咱们指定的一种特殊符号(代置符号),通常选择一个不经常使用的字符来充当代置符号,在下面示例中我使 用了一个制表符(┢),只要是可以确保不会在数组元素中出现的符号均可以充当代置符号。对象
接下来就是咱们最暴虐的一步了,仍是用 replace() 方法,去除半角逗号(,)和代置符号(┢)之外的全部字符。通通去干净之后这个字符串就变成了一串半角逗号之中包含着一个代置符号(这模样:,,,,,,,,,,,,,,,,┢,,,,,,,,,)。blog
最后,用 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 onclick=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自带的
使用过滤函数过滤数组元素。
此函数至少传递两个参数:待过滤数组和过滤函数。过滤函数必须返回 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