JS暴虐查找法簡潔版
更新時(shí)間:2008年07月18日 12:51:31 作者:
有過相關(guān)經(jīng)驗(yàn)的朋友都知道,Jscript的效率畢竟有限,在數(shù)組中查找數(shù)據(jù)時(shí)如果用常規(guī)的算法來做執(zhí)行起來會(huì)很慢。
例如在一個(gè)含500個(gè)字符串的data數(shù)組里,我們想要找到一個(gè)指定的字符(key),返回它的數(shù)組下標(biāo),如果用這樣的算法:
function usual_search(data,key)
{
var m=data.length
for(i=0;i<m;i++)
{if(data[i]==key)return i}
}
由于需要做多次的比較,運(yùn)算起來會(huì)相當(dāng)?shù)穆?nbsp;
本主題要介紹的是一種充分利用Jscript內(nèi)置方法來實(shí)現(xiàn)在數(shù)組中查找數(shù)據(jù)的方法,由于借助Jscript內(nèi)置方法,其效率要遠(yuǎn)優(yōu)于上述常規(guī)算法。為了(詼諧|唬人)起見,我命其名為“JS暴虐查找法”。
這種查找法對于數(shù)組元素有一個(gè)要求:就是數(shù)組元素的內(nèi)容不得包含半角逗號(,)及我們指定的某一個(gè)代置符號(例如,在下面的示例中,我們指定代置符號為一個(gè)制表符“┢”)。在事先構(gòu)建、維護(hù)數(shù)組時(shí)要注意滿足這一要求。
JS暴虐查找法的思路是非常簡單的,原則只有一個(gè),就是要“充分利用Jscript內(nèi)置方法”:
我們首先利用 Array 對象的 toString() 方法產(chǎn)生一個(gè)包含數(shù)組元素的字符串,在這個(gè)字符串中各數(shù)組元素由半角逗號(,)分隔的,所以我們事先要求數(shù)組元素的內(nèi)容不得包含半角逗號。
隨后利用 String 對象的 replace() 方法將這個(gè)字符串中所包含的我們要找的關(guān)鍵字符串替換成我們指定的一種特殊符號(代置符號),一般選擇一個(gè)不常用的字符來充當(dāng)代置符號,在下面示例中我使用了一個(gè)制表符(┢),只要是能夠確保不會(huì)在數(shù)組元素中出現(xiàn)的符號都可以充當(dāng)代置符號。
接下來就是我們最暴虐的一步了,還是用 replace() 方法,去除半角逗號(,)和代置符號(┢)以外的所有字符。統(tǒng)統(tǒng)去干凈以后這個(gè)字符串就變成了一串半角逗號之中包含著一個(gè)代置符號(這模樣:,,,,,,,,,,,,,,,,┢,,,,,,,,,)。
最后,用 String 對象的 indexOf() 方法返回代置符號在這個(gè)字符串中的位置,而這個(gè)位置恰恰也就是在原來數(shù)組中的數(shù)組下標(biāo)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
function usual_search(data,key)
{
var m=data.length
for(i=0;i<m;i++)
{if(data[i]==key)return i}
}
由于需要做多次的比較,運(yùn)算起來會(huì)相當(dāng)?shù)穆?nbsp;
本主題要介紹的是一種充分利用Jscript內(nèi)置方法來實(shí)現(xiàn)在數(shù)組中查找數(shù)據(jù)的方法,由于借助Jscript內(nèi)置方法,其效率要遠(yuǎn)優(yōu)于上述常規(guī)算法。為了(詼諧|唬人)起見,我命其名為“JS暴虐查找法”。
這種查找法對于數(shù)組元素有一個(gè)要求:就是數(shù)組元素的內(nèi)容不得包含半角逗號(,)及我們指定的某一個(gè)代置符號(例如,在下面的示例中,我們指定代置符號為一個(gè)制表符“┢”)。在事先構(gòu)建、維護(hù)數(shù)組時(shí)要注意滿足這一要求。
JS暴虐查找法的思路是非常簡單的,原則只有一個(gè),就是要“充分利用Jscript內(nèi)置方法”:
我們首先利用 Array 對象的 toString() 方法產(chǎn)生一個(gè)包含數(shù)組元素的字符串,在這個(gè)字符串中各數(shù)組元素由半角逗號(,)分隔的,所以我們事先要求數(shù)組元素的內(nèi)容不得包含半角逗號。
隨后利用 String 對象的 replace() 方法將這個(gè)字符串中所包含的我們要找的關(guān)鍵字符串替換成我們指定的一種特殊符號(代置符號),一般選擇一個(gè)不常用的字符來充當(dāng)代置符號,在下面示例中我使用了一個(gè)制表符(┢),只要是能夠確保不會(huì)在數(shù)組元素中出現(xiàn)的符號都可以充當(dāng)代置符號。
接下來就是我們最暴虐的一步了,還是用 replace() 方法,去除半角逗號(,)和代置符號(┢)以外的所有字符。統(tǒng)統(tǒng)去干凈以后這個(gè)字符串就變成了一串半角逗號之中包含著一個(gè)代置符號(這模樣:,,,,,,,,,,,,,,,,┢,,,,,,,,,)。
最后,用 String 對象的 indexOf() 方法返回代置符號在這個(gè)字符串中的位置,而這個(gè)位置恰恰也就是在原來數(shù)組中的數(shù)組下標(biāo)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
相關(guān)文章
將頁面table內(nèi)容與樣式另存成excel文件的方法
本文分析一下將頁面table內(nèi)容與樣式另存成excel文件的方法,主要介紹style與class之間的區(qū)別問題。2015-08-08JavaScript中字符串GBK與GB2312的編解碼示例講解
在瀏覽器JavaScript環(huán)境中,可以使用TextEncoder和TextDecoder?API?來進(jìn)行?GBK?編碼和解碼,也可以使用?encodeURIComponent?函數(shù)對字符串進(jìn)行編碼,最好使用第三方庫,比如iconv-lite來實(shí)現(xiàn)2023-12-12Javascript浮點(diǎn)數(shù)乘積運(yùn)算出現(xiàn)多位小數(shù)的解決方法
這篇文章主要介紹了Javascript浮點(diǎn)數(shù)乘積運(yùn)算出現(xiàn)多位小數(shù)的解決方法,需要的朋友可以參考下2014-02-02小程序點(diǎn)餐界面添加購物車左右擺動(dòng)動(dòng)畫
這篇文章主要介紹了小程序點(diǎn)餐界面添加購物車左右擺動(dòng)動(dòng)畫,當(dāng)用戶點(diǎn)擊添加到購物車后會(huì)有一個(gè)左右擺動(dòng)的購物車提示效果,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09javascript實(shí)現(xiàn)簡約的頁面右下角點(diǎn)擊彈出窗口示例【測試可用】
這篇文章主要介紹了javascript實(shí)現(xiàn)的頁面右下角點(diǎn)擊彈出窗口功能,結(jié)合實(shí)例形式詳細(xì)分析了javascript頁面右下角點(diǎn)擊彈出窗口功能的相關(guān)步驟、原理與注意事項(xiàng),需要的朋友可以參考下2023-07-07JS操作字符串轉(zhuǎn)換為數(shù)值并取整的代碼
這篇文章主要介紹了JS操作字符串轉(zhuǎn)換為數(shù)值并取整的代碼,代碼比較短,需要的朋友可以參考下2014-01-01