假設我們有一個字符串數組,像這樣:最快的方式
var arr = ['qwe', 'rty', 'uio p', 'a', 's df'];
,但更長的時間。和一個字符串,這是用戶輸入。
因此,每keyup
(下一個字符插入該字符串),我必須檢查該字符串是否存在該數組中。
我知道我可以通過每次循環訪問數組來完成 - 但是有什麼辦法可以讓它更快嗎?
假設我們有一個字符串數組,像這樣:最快的方式
var arr = ['qwe', 'rty', 'uio p', 'a', 's df'];
,但更長的時間。和一個字符串,這是用戶輸入。
因此,每keyup
(下一個字符插入該字符串),我必須檢查該字符串是否存在該數組中。
我知道我可以通過每次循環訪問數組來完成 - 但是有什麼辦法可以讓它更快嗎?
您可以使用indexOf()函數。
var arr = ['qwe', 'rty', 'uio p', 'a', 's df'];
var str= 'rty';
var isPresent = (arr.indexOf(str) > -1);
爲了解釋: 的indexOf()返回在數組中找到的字符串的索引。如果找不到字符串,則返回-1。 因此... indexOf('qwe')返回0,indexOf('rty')返回1,等等。但是indexOf('foo')返回-1。
這真的很快嗎? – k102 2014-08-27 13:59:02
我認爲這是你得到的最好的。 – 2014-08-27 13:59:47
@ k102:首先,'它真的很快嗎?':[檢查你自己:JSPerf.com](http://jsperf.com/);第二,你真的需要多快? – 2014-08-27 14:02:12
使用IndexOf()
:
var arr = ['qwe', 'rty', 'uio p', 'a', 's df'];
arr.indexOf('a'); // returns 3
arr.indexOf('aaa'); // returns -1
'arr.indexOf(輸入)> -1' – Mritunjay 2014-08-27 13:59:09
使用數組,你不能得到比線性更好。你需要某種形式的樹/表或其他索引數據結構才能進入'O(n)' – blgt 2014-08-27 14:01:41