2014-08-27 80 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