2014-08-27 125 views
0

假設我們有一個字符串數組,像這樣:最快的方式

var arr = ['qwe', 'rty', 'uio p', 'a', 's df']; 

,但更長的時間。和一個字符串,這是用戶輸入。

因此,每keyup(下一個字符插入該字符串),我必須檢查該字符串是否存在該數組中。

我知道我可以通過每次循環訪問數組來完成 - 但是有什麼辦法可以讓它更快嗎?

+1

'arr.indexOf(輸入)> -1' – Mritunjay 2014-08-27 13:59:09

+2

使用數組,你不能得到比線性更好。你需要某種形式的樹/表或其他索引數據結構才能進入'O(n)' – blgt 2014-08-27 14:01:41

回答

7

您可以使用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。

+0

這真的很快嗎? – k102 2014-08-27 13:59:02

+0

我認爲這是你得到的最好的。 – 2014-08-27 13:59:47

+1

@ k102:首先,'它真的很快嗎?':[檢查你自己:JSPerf.com](http://jsperf.com/);第二,你真的需要多快? – 2014-08-27 14:02:12

2

使用IndexOf()

var arr = ['qwe', 'rty', 'uio p', 'a', 's df']; 
arr.indexOf('a'); // returns 3 
arr.indexOf('aaa'); // returns -1