2012-02-10 70 views
1

我需要检查一个字符串是否在数组中,作为数组中任何项的字符串的一部分。 可以说数组中的一个项目是“Hello World”,字符串是“ello”,我需要返回true。inArray&in字符串

+0

看看这个问题 http://stackoverflow.com/questions/3975871/optimize-search-through-large-js-string-array – Shaheer 2012-02-10 06:02:49

回答

2

是的,你可以做到这一切。或 -

if(String(array).indexOf('ello')!=-1){ 
    ello is in the array 
} 
+0

你是马安兄弟! – boruchsiper 2012-02-10 09:35:04

+0

我不知道这种类型的语法可用。 gr8工作的人! – Shaheer 2012-02-11 20:54:45

0

你可以做这样的事情:

function contains(arr, str) { 
    var i = 0, 
     len = arr.length; 

    for (; i < len; ++i) { 
     if (arr[i].indexOf(str) > -1) { 
      return true; 
     } 
    } 
    return false; 
} 

显然,这是在几个方面幼稚的,例如,它没有考虑大小写,也不会告诉你哪个或多少项目匹配,但你可以很容易地修改它来做到这一点。

+0

+1。为什么地球上有人投票呢?它与另一个被选为_up_的答案(实际上)是相同的,只不过这个答案是首先发布的。 (我并不真的在''for'语句中初始化循环控制变量_before_的样式,但这不是downvote的原因。) – nnnnnn 2012-02-10 06:20:48

1

只需遍历数组并检查每个字符串。

function isStringInArray(data, stringToFind) { 
    for (var i = 0; i < data.length; i++) { 
     if (data[i].indexOf(stringToFind) > -1) return true; 
    } 
    return false; 
} 
+0

如果用户有超过1000个元素,该怎么办? – Shaheer 2012-02-10 06:03:28

+0

@Shaheer除了缓存数组的'length'之外,还有一个问题吗? – alex 2012-02-10 06:05:00

+0

问题在于循环。它将循环遍历数组的每个元素 – Shaheer 2012-02-10 06:07:00

1

如果你有一个现代的浏览器或想polyfillArray.prototype.some()(或者使用一个库如Underscore)。

var contains = ['A', 'Hello World'].some(function(member) { 
    return ~member.indexOf('ello'); 
}); 

jsFiddle

您标记这个jQuery的,所以你也可以使用这个(将在你可能关心所有的浏览器)...

var contains = !!$.grep(['A', 'Hello World'], function(member) { 
    return ~member.indexOf('ello'); 
}).length; 

jsFiddle

+0

它会在ie6/7上运行吗?他们有很大的市场份额。 – Shaheer 2012-02-10 06:04:41

+0

@Shaheer不,但我链接到一个polyfill。 – alex 2012-02-10 06:05:29

+0

这可能是一个很好的解决方案。 – Shaheer 2012-02-10 06:09:14