有一个动态数组,[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>
经过验证确实可以查出
2
Array.intersect = function(a, b){
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> new document </title>
<meta name="generator" content="editplus" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
<body>
<script type="text/javascript">
<!--
Array.ExistsSameValues = function(a1, a2) {
var exists = false;
if(a1 instanceof Array && a2 instanceof Array)
{
for (var i=0,iLen=a1.length; i<iLen; i++)
{
for (var j=0,jLen=a2.length; j<jLen; j++)
{
if (a1[i]===a2[j])
{
return true;
}
}
}
}
return exists;
};
var a1 = [1, 2, 5, 8];
var a2 = [3, 1, 9, 5];
alert(Array.ExistsSameValues(a1, a2));
//-->
</script>
</body>
</html>
var arr1=["a","b","c"];
var arr2=["a","f","g","c"];
var arr3=[];
for(var s in arr1){
for(var x in arr2){
if(arr1[s]==arr2[x]){
arr3.push(arr1[s]);
}
}
}
alert("相同的元素有"+arr3)
js 中判断某个元素是否存在于某个 js 数组中,相当于 php 语言中的 in_array 函数。
Array.prototype.S=String.fromCharCode(2);
Array.prototype.in_array=function(e){
var r=new RegExp(this.S+e+this.S);
return (r.test(this.S+this.join(this.S)+this.S));
};
用法如下:
1
var arr=new Array();
2
arr.in_array('test');//判断 test 字符串是否存在于 arr 数组中,存在返回true 否则false
注:此函数只能对字符和数字有效