如何在javascript/jquery中查找数组是否包含特定字符串?

How to find if an array contains a specific string in JavaScript/jQuery?

本问题已经有最佳答案,请猛点这里访问。

有人能告诉我如何检测数组中是否出现"specialword"?例子:

1
2
3
4
5
categories: [
   "specialword"
   "word1"
   "word2"
]


你真的不需要jquery。

1
2
var myarr = ["I","like","turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);

Hint: indexOf returns a number, representing the position where the specified searchvalue occurs for the first time, or -1 if it never
occurs

1
2
3
4
function arrayContains(needle, arrhaystack)
{
    return (arrhaystack.indexOf(needle) > -1);
}

值得注意的是,在IE<9中不支持EDCOX1 15的引用,但是jQuery的EDCOX1×16的函数即使对于那些旧版本也适用。


jquery提供$.inArray

注意,in array返回找到的元素的索引,因此0指示元素是数组中的第一个。-1表示找不到元素。

1
2
3
4
5
6
7
var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = $.inArray('specialword', categoriesPresent) > -1;
var foundNotPresent = $.inArray('specialword', categoriesNotPresent) > -1;

console.log(foundPresent, foundNotPresent); // true false
1
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">

3.5年后编辑

$.inArray实际上是Array.prototype.indexOf在支持它的浏览器(现在几乎所有浏览器)中的一个包装器,而在不支持它的浏览器中提供一个填充程序。它实质上相当于在Array.prototype中添加一个填充程序,这是一种更惯用的/jsish方式。MDN提供此类代码。这些天,我会选择这个选项,而不是使用jquery包装器。

1
2
3
4
5
6
7
var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.indexOf('specialword') > -1;
var foundNotPresent = categoriesNotPresent.indexOf('specialword') > -1;

console.log(foundPresent, foundNotPresent); // true false

3年后再编辑

gosh,6.5年?!< /Sub >

在现代JavaScript中,最好的选择是Array.prototype.includes

1
var found = categories.includes('specialword');

没有比较,也没有混淆的-1结果。它做我们想要的:它返回truefalse。对于旧的浏览器,它可以使用MDN上的代码进行多填充。

1
2
3
4
5
6
7
var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.includes('specialword');
var foundNotPresent = categoriesNotPresent.includes('specialword');

console.log(foundPresent, foundNotPresent); // true false


干得好:

1
$.inArray('specialword', arr)

此函数返回一个正整数(给定值的数组索引),如果在数组中找不到给定值,则返回-1

现场演示:http://jsfiddle.net/simevidas/5gdfc/

您可能想这样使用:

1
2
3
if ( $.inArray('specialword', arr) > -1 ) {
    // the value is in the array
}

您可以使用for循环:

1
2
3
4
5
6
7
var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] ==="specialword") {
    found = true;
    break;
  }
}


我不喜欢$.inArray(..),这是一种大多数理智的人无法容忍的丑陋的jquery式解决方案。下面是一个片段,它为您的兵工厂添加了一个简单的contains(str)方法:

1
2
3
4
5
6
7
8
9
$.fn.contains = function (target) {
  var result = null;
  $(this).each(function (index, item) {
    if (item === target) {
      result = item;
    }
  });
  return result ? result : false;
}

同样,您可以将EDOCX1[1]包装为一个扩展:

1
2
3
$.fn.contains = function (target) {
  return ($.inArray(target, this) > -1);
}