在JavaScript中如何检查一个字符串数组是否包含一个字符串?

285
我有一个字符串数组和一个字符串,我想将该字符串与数组值进行比较,并对结果应用条件 - 如果数组包含该字符串则执行"A",否则执行"B"。如何实现这个功能?

1
请查看:https://dev59.com/E3VC5IYBdhLWcg3wnCj6 - Anthony Simmon
1
indexOf MDN文档 - epascarello
遍历数组并逐一比较! - SachinGutte
1
这个问题为什么还没有关闭呢?它明明是众多其他问题的复制,比如JavaScript数组中查找项的最佳方法?JavaScript 中 array.contains(obj) 的应用等。而管理员却关闭或删除了实际有用的问题。 - Dan Dascalescu
5个回答

504

所有数组(除了Internet Explorer 8及以下版本)都有一个名为indexOf的方法,它将返回数组中元素的索引,如果元素不在数组中则返回-1:

if (yourArray.indexOf("someString") > -1) {
    //In the array!
} else {
    //Not in the array
}

如果您需要支持旧版IE浏览器,您可以使用MDN的文章中提供的代码来填充此方法。


2
在React和Babel ES2017中,有更好的方法来完成这个吗? - devssh
14
这种方法可以起作用,但看起来有点像滥用的感觉。我更建议使用includes函数,这正是作者所要求的。以下是一个例子:['A', 'B'].includes('A') // >> true ['A', 'B'].includes('C') // >> false - Stanislau Baranouski
2
@StanislauBaranouski - 的确!在2020年及以后,includes()更好。更多信息请参见此处 - rinogo

66
你可以使用 indexOf 方法,并像这样 "扩展" Array 类的方法 contains
Array.prototype.contains = function(element){
    return this.indexOf(element) > -1;
};

以下是结果:

["A", "B", "C"].contains("A") 相等于 true

["A", "B", "C"].contains("D") 相等于 false


不错的回答,但是值得一提的是,在使用indexOf时要考虑旧版IE的兼容性问题。 - Gaʀʀʏ
51
没有人关心 IE,即使是微软 :D - andygoestohollywood
4
遗憾的是,仍有一些公司在使用IE浏览器。尽管某些公司还停留在“石器时代”,但这并不意味着你应该放弃9%的市场份额。 - Alex Fallenstedt
@AlexFallenstedt 这取决于你的市场是谁 :) - brandito
3
@AlexFallenstedt 没错。Internet Explorer已经被证明是与现代网络技术不兼容的安全威胁。如果一家公司有能力花费$X来使用你的web应用程序,他们也有能力花费$0来安装Firefox或其他没有后门的浏览器。如果由于某些愚蠢的原因他们不愿意这样做,就在标价上加$Y并将你的应用程序打包在NW.js或Electron中。 - Skylar Ittner
2
许多跨国公司在其内部网络中使用IE浏览器。为什么?早些年,一支内部开发团队决定让内部网络在一个浏览器上运行。我所在的公司也是如此。他们选择了IE浏览器。今天,这家全球性公司拥有216,000名员工,而且还在不断增加。企业遗留系统是如此相互关联,以至于要进行任何更改都需要大量的时间和金钱。对于一些组织来说,为了让员工停止抱怨IE浏览器,这几乎是不可能的。对于他们来说,这没有商业价值,而且永远不会有。 - Alex Fallenstedt

40
var stringArray = ["String1", "String2", "String3"];

return (stringArray.indexOf(searchStr) > -1)

10
创建此函数原型:
Array.prototype.contains = function ( needle ) {
   for (var i in this) { // Loop through every item in array
      if (this[i] == needle) return true; // return true if current item == needle
   }
   return false;
}

然后,您可以使用以下代码在数组x中进行搜索。
if (x.contains('searchedString')) {
    // do a
}
else
{
      // do b
}

2
阅读《为什么在数组迭代中使用“for...in”是一个坏主意?》(https://dev59.com/ZXRB5IYBdhLWcg3wz6ed) - Bergi
2
不高效的代码。 - Ankur Loriya
一种不好的做法。如果你真的想要包含,最好用indexOf进行包装。 - Isan Rivkin

5
这将为您完成此操作:
function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle)
            return true;
    }
    return false;
}

我在Stack Overflow的问题中发现了这个内容,问题链接为JavaScript equivalent of PHP's in_array()


3
你重新创造了现代浏览器支持的indexOf函数。 - epascarello
9
许多人,包括我自己,需要为IE8(以及不幸的是大部分时间还需要为IE7)进行开发,但在IE9之前,这种方法不受支持。不可否认,创建indexOf函数的原型方法是比我发布的解决方案更好的选择。 - ollie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接