【问题标题】:How to check if a string array contains one string in JavaScript? [duplicate]如何检查一个字符串数组是否包含 JavaScript 中的一个字符串? [复制]
【发布时间】:2012-09-19 08:24:55
【问题描述】:

我有一个字符串数组和一个字符串。我想根据数组值测试这个字符串,并在结果中应用一个条件 - 如果数组包含字符串,则执行“A”,否则执行“B”。

我该怎么做?

【问题讨论】:

标签: javascript arrays string testing


【解决方案1】:

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

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

如果需要支持旧的IE浏览器,可以使用the MDN article中的代码polyfill这个方法。

【讨论】:

  • React、Babel ES2017 有没有更好的方法?
  • 这种方法有效,但看起来有点误用。我宁愿推荐使用includes func,这正是作者所要求的。下面是一个例子: ['A', 'B'].includes('A') // >> true ['A', 'B'].includes('C') // >> false
  • @StanislauBaranouski - 确实! includes() 在 2020 年及以后会更好。 More info here
【解决方案2】:

您可以使用indexOf 方法并使用contains 方法“扩展” Array 类,如下所示:

Array.prototype.contains = function(element){
    return this.indexOf(element) > -1;
};

结果如下:

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

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

【讨论】:

  • 不错的答案,但值得一提的是旧 IE 版本在使用 indexOf 时的兼容性问题。
  • 没人关心 ie,甚至 microsoft :D
  • @andygoestohollywood 遗憾的是,一些公司仍在使用 IE。仅仅因为一些公司处于石器时代并不意味着你应该放弃 9% 的市场。
  • @AlexFallenstedt 是的,不。 Internet Explorer 是一种经过验证的安全威胁,与现代 Web 技术不兼容。如果一家公司有能力花 X 美元来使用您的网络应用程序,他们就可以花 0 美元来安装 Firefox 或其他没有后门的东西。如果他们出于某些愚蠢的原因不这样做,请将 $Y 添加到标价中,并将您的应用程序打包为 NW.js 或 Electron。
  • @SkylarIttner 许多跨国公司将 IE 用于其 Intranet。为什么?过去,一个内部开发团队决定让 Intranet 在一个浏览器上运行。我工作的公司就是这样的。他们选择了 IE。今天,这家拥有 216,000 名员工且还在不断增加的全球性公司。企业遗留系统是如此相互关联,它确实需要大量的时间和金钱来进行任何更改。对于一些组织来说,为了让员工停止抱怨 IE,几乎不可能做出承诺。对他们来说,其中没有商业价值,以后也不会有。
【解决方案3】:
var stringArray = ["String1", "String2", "String3"];

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

【讨论】:

    【解决方案4】:

    创建这个函数原型:

    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
    }
    

    【讨论】:

    【解决方案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()。

    【讨论】:

    • 你重新发明了现代浏览器支持的 indexOf。
    • ...在 IE9 之前,IE 不支持它 - 很多人,包括我自己,都必须为 IE8 开发(遗憾的是,大部分时间也是 IE7)。诚然,创建 indexOf 函数的原型方法是我发布的更好的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 2021-05-06
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多