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

时间:2011-05-24 20:31:35

标签: javascript jquery arrays string

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

categories: [
    "specialword"
    "word1"
    "word2"
]

5 个答案:

答案 0 :(得分:849)

你真的不需要jQuery。

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

提示:indexOf返回一个数字,表示第一次出现指定搜索值的位置,如果从未出现,则返回-1   发生

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

值得注意的是array.indexOf(..)not supported in IE < 9,但jQuery的indexOf(...)函数即使对于那些旧版本也能正常工作。

答案 1 :(得分:581)

jQuery提供$.inArray

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

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
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


3。5年后编辑

$.inArray实际上是Array.prototype.indexOf在支持它的浏览器中的包装器(现在几乎所有这些都是),而在那些不支持它的情况下提供垫片。它本质上相当于向Array.prototype添加一个垫片,这是一种更惯用/ JSish的做事方式。 MDN提供such code。这些天我会采用这个选项,而不是使用jQuery包装器。

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年后再编辑

天哪,6。5年?!

现代Javascript中最好的选择是Array.prototype.includes

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

没有比较,也没有令人困惑的-1结果。它做我们想要的:它返回truefalse。对于旧版浏览器,它是可填充的using the code at MDN

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

答案 2 :(得分:30)

你走了:

$.inArray('specialword', arr)

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

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

你可能想要这样使用它:

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

答案 3 :(得分:14)

您可以使用for循环:

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}

答案 4 :(得分:4)

我不喜欢$.inArray(..),这是一种丑陋的jQuery-ish解决方案,大多数理智的人都不会容忍。这是一个片段,为您的武器库添加了一个简单的contains(str)方法:

$.fn.contains = function (target) {
  var result = null;
  $(this).each(function (index, item) {
    if (item === target) {
      result = item;
    }
  });
  return result ? result : false;
}

同样,您可以将$.inArray包裹在扩展程序中:

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