JS快速查詢法

2021-08-22 17:30:48 字數 1074 閱讀 1138

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

例如在乙個含500個字串的data陣列裡,我們想要找到乙個指定的字元(key),返回它的陣列下標,如果用這樣的演算法:

code:

function usual_search(data,key)

{var m=data.length

for(i=0;i

由於需要做多次的比較,運算起來會相當的慢。

本主題要介紹的是一種充分利用jscript內建方法來實現在陣列中查詢資料的方法,由於借助jscript內建方法,其效率要遠優於上述常規演算法。為了(詼諧|唬人)起見,我命其名為「js暴虐查詢法」。

這種查詢法對於陣列元素有乙個要求:就是陣列元素的內容不得包含半形逗號(,)及我們指定的某乙個代置符號(例如,在下面的示例中,我們指定代置符號為乙個製表符「┢」)。在事先構建、維護陣列時要注意滿足這一要求。

js暴虐查詢法的思路是非常簡單的,原則只有乙個,就是要「充分利用jscript內建方法」:

我們首先利用 array 物件的 tostring() 方法產生乙個包含陣列元素的字串,在這個字串中各陣列元素由半形逗號(,)分隔的,所以我們事先要求陣列元素的內容不得包含半形逗號。

隨後利用 string 物件的 replace() 方法將這個字串中所包含的我們要找的關鍵字串替換成我們指定的一種特殊符號(代置符號),一般選擇乙個不常用的字元來充當代置符號,在下面示例中我使用了乙個製表符(┢),只要是能夠確保不會在陣列元素中出現的符號都可以充當代置符號。

接下來就是我們最暴虐的一步了,還是用 replace() 方法,去除半形逗號(,)和代置符號(┢)以外的所有字元。統統去乾淨以後這個字串就變成了一串半形逗號之中包含著乙個代置符號(這模樣:,,,,,,,,,,,,,,,,┢,,,,,,,,,)。

最後,用 string 物件的 indexof() 方法返回代置符號在這個字串中的位置,而這個位置恰恰也就是在原來陣列中的陣列下標。

jscript示例程式:

執行**框

data:key:查詢

不應該忽略的是:是指令碼執行非內建演算法**的低效率使得這個js暴虐查詢法有意義。

快速查詢演算法

在日常的演算法中,查詢是乙個經常涉及到的話題,而如何提高查詢的速度,也是很多程式設計師 軟體研究的話題。先看乙個例子。有這樣乙個資料型別s 學生姓名 name 性別 年齡 age 現在假設有這樣乙個需求 檔案a b中分別存放大量s 的記錄,需要將a b中重複的記錄去掉。我們用c 來演示今天的話題 t...

快速查詢素數

題目 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 現在給你乙個正整數n,要你快速的找出在2.n這些數裡面所有的素數。輸入給出乙個正整數數n n 2000000 但n為0時結束程式。測試資料不超過100組 輸出將2 n範圍內所有的素數輸出。兩個數之間用空格隔開 樣例輸入 5...

快速查詢素數

快速查詢素數 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述現在給你乙個正整數n,要你快速的找出在2.n這些數裡面所有的素數。輸入給出乙個正整數數n n 2000000 但n為0時結束程式。測試資料不超過100組 輸出將2 n範圍內所有的素數輸出。兩個數之間用空格隔開 樣例輸...