如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]
Posted
技术标签:
【中文标题】如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]【英文标题】:How to check if a string array contains one string in JavaScript? [duplicate]如何检查一个字符串数组是否包含 JavaScript 中的一个字符串? [复制] 【发布时间】:2012-09-19 08:24:55 【问题描述】:我有一个字符串数组和一个字符串。我想根据数组值测试这个字符串,并在结果中应用一个条件 - 如果数组包含字符串,则执行“A”,否则执行“B”。
我该怎么做?
【问题讨论】:
检查一下:***.com/questions/237104/… indexOf MDN Docs 遍历数组并一一比较! 当这个问题与大量其他问题重复时,它怎么还没有结束? Best way to find an item in a javascript array?、array.contains(obj) in JavaScript 等。而不是版主 close or delete actually useful questions。 【参考方案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
【讨论】:
阅读Why is using “for…in” with array iteration such a bad idea? 效率不高的代码。 一个不好的做法。如果你真的想要包含你最好用 indexOf 包装它【参考方案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 函数的原型方法是我发布的更好的解决方案以上是关于如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何检查字节数组是不是包含 Java 中的 Unicode 字符串?