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

gtl*_*wig 221 javascript arrays string testing

我有一个字符串数组和一个字符串.我想针对数组值测试此字符串并应用条件结果 - 如果数组包含字符串do"A",否则执行"B".

我怎样才能做到这一点?

Jam*_*ice 397

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

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

如果需要支持旧的IE浏览器,可以使用MDN文章中的代码对此方法进行填充.

  • 有没有更好的方法来做到这一点,React,Babel ES2017? (2认同)
  • 这种方法可行,但看起来有点滥用。我宁愿建议使用`includes'函数,这正是作者所要求的。下面是一个示例:['A','B']。includes('A')// >> true ['A','B']。includes('C')// >>否 (2认同)
  • @StanislauBaranouski - 确实如此!`includes()` 在 2020 年及以后会更好。[更多信息在这里](/sf/answers/103161971/) (2认同)

fab*_*eal 55

您可以使用此indexOf方法并使用以下方法"扩展"Array类contains:

Array.prototype.contains = function(element){
    return this.indexOf(element) > -1;
};
Run Code Online (Sandbox Code Playgroud)

结果如下:

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

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

  • 没人关心,即使是微软:D (24认同)
  • @andygoestohollywood 可悲的是,有些公司仍在使用 IE。仅仅因为一些公司处于石器时代并不意味着你应该抛弃 9% 的市场。 (3认同)
  • @AlexFallenstedt是的,没有.Internet Explorer是一种经过验证的安全威胁,与现代Web技术不兼容.如果一家公司可以花费X美元来使用您的网络应用程序,他们可以花费0美元来安装Firefox或其他没有后门的东西.如果由于某些愚蠢的原因他们不会这样做,请在贴纸价格中添加$ Y并将您的应用打包在NW.js或Electron中. (2认同)
  • @SkylarIttner 许多跨国公司使用 IE 作为其内部网。为什么?当年,一个内部开发团队决定让 Intranet 在一个浏览器上运行。我工作的公司就是这样的。他们选择了IE。如今,这家全球性公司拥有 21.6 万名员工,而且这一数字还在不断增加。企业遗留系统是如此相互关联,以至于确实需要大量的时间和金钱来进行任何更改。对于某些组织来说,仅仅为了让员工不再抱怨 IE 而做出这样的承诺几乎是不可能的。对他们来说,它没有商业价值,而且永远不会有。 (2认同)

Fix*_*ker 26

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

return (stringArray.indexOf(searchStr) > -1)
Run Code Online (Sandbox Code Playgroud)


eri*_*nix 8

创建此函数原型:

Array.prototype.contains = function ( needle ) {
   for (i in this) {
      if (this[i] == needle) return true;
   }
   return false;
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下代码在数组x中搜索

if (x.contains('searchedString')) {
    // do a
}
else
{
      // do b
}
Run Code Online (Sandbox Code Playgroud)

  • 阅读 [为什么在数组迭代中使用“for...in”是个坏主意?](/sf/ask/35035311/一个坏主意) (2认同)
  • 不是高效的代码。 (2认同)

oll*_*lie 5

这将为您做到:

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle)
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我发现它在Stack Overflow问题JavaScript中相当于PHP的in_array().

  • ...在IE9之前IE不支持 - 包括我自己在内的很多人都必须为IE8开发(而且大多数时候也是IE7).不可否认,创建indexOf函数的prototype方法是我发布的首选解决方案 (9认同)
  • 你重新发明了现代浏览器支持的indexOf. (3认同)