js 数组快速查询指定字符串方法
2013-03-09 23:53
337 查看
转载自:http://blog.sina.com.cn/s/blog_024ec1880100t6p9.html
有一个动态数组,[adfjsf,ad2fjsf,adf32jsf,ad4fjsf,ad523fjsf,a523dfjsf,ad423fjsf,adfjs234f,......]
我想查查数组是否有abc这个字符串,最开始js用的是for循环取出数组一个个对比,后来一想,数组如果越来越多,用for循环的话效率会很慢,就在网上搜了一下,发现两个别人写的博文,里面方法很好:
1.
例如在一个含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 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
转载自:http://bbs.csdn.net/topics/320241469
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));
};
用法如下:
注:此函数只能对字符和数字有效
有一个动态数组,[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 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自带的
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
转载自:http://bbs.csdn.net/topics/320241469
<!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)转载自:http://www.phpernote.com/javascript-function/564.html
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 |
相关文章推荐
- js 数组快速查询指定字符串方法
- JS中调用后台方法进行验证&&返回值后加?的意思&&在GridView中指定一列为超级链接并有查询字符串的写法
- JS解析json数据并将json字符串转化为数组的实现方法
- php使用glob函数快速查询指定目录文件的方法
- [置顶] js中数组Array和字符串String的属性方法归纳总结
- js获取url查询字符串封装方法
- js 实现对JSON数组模糊查询的方法
- 第十七周 利用指针和数组的方法分别查询字符串的个数
- js数组、字符串常用方法
- js中获取URL中指定的查询字符串
- php通过数组实现多条件查询实现方法(字符串分割)
- js数组与字符串的相互转换方法
- js删除Array数组中指定元素的两种方法
- JS实现字符串中去除指定子字符串方法分析
- php使用glob函数快速查询指定目录文件的方法
- js数组与字符串的相互转换方法
- JS关于字符串和数组的一些使用方法
- js数组与字符串的相互转换方法
- JS解析json数据并将json字符串转化为数组的实现方法
- JS解析json数据并将json字符串转化为数组的实现方法