js 數組快速查詢指定字符串方法

有一個動態數組,[adfjsf,ad2fjsf,adf32jsf,ad4fjsf,ad523fjsf,a523dfjsf,ad423fjsf,adfjs234f,......]
我想查查數組是否有abc這個字符串,最開始js用的是for循環取出數組一個個對比,後來一想,數組若是愈來愈多,用for循環的話效率會很慢,就在網上搜了一下,發現兩個別人寫的博文,裏面方法很好:
1.html

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暴虐查找法」。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自帶的

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

相關文章
相關標籤/搜索