奇招 Javascript暴虐尋找法

來源:互聯網
上載者:User
javascript

有過相關經驗的朋友都知道,Jscript的效率畢竟有限,在數組中尋找資料時如果用常規的演算法來做執行起來會很慢。

例如在一個含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() 方法返回代置符號在這個字串中的位置,而這個位置恰恰也就是在原來數組中的數組下標。

Jscript樣本程式:

運行代碼框

<script>function JS_cruel_search(data,key) /*JS暴虐尋找*/{ re = new RegExp(key,[""]) return (data.toString().replace(re,"┢").replace(/[^,┢]/g,"")).indexOf("┢")}function show(){p=DataWord.value.split(",") key=keyWord.valueresult=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>

    [Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。