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

IT技术 javascript jquery arrays string
2021-01-28 13:29:49

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

categories: [
    "specialword"
    "word1"
    "word2"
]
6个回答

你真的不需要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(..)IE < 9 不支持,但 jQuery 的indexOf(...)功能即使对于那些旧版本也能工作。

詹姆斯,那个页面确实说它可以在 IE9 中工作,正如我所指出的。你让它在 IE < 9 上工作了吗?我相信我已经遇到了 IE7 和 IE8 中缺少的此功能,但实际上并没有进行测试;相反,我依靠developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-03-12 13:29:49
怎么样'foo' in arr
2021-03-13 13:29:49
indexOf 在所有主流浏览器中都可用,除了 IE < 9
2021-03-25 13:29:49
@SuperUberDuper:检查对象键是否存在:1 in ['a'] -> false 1 in ['a', 'b'] -> true 'length' in [] -> true在 JS 中,数组本质上是一个带有数字键的对象。
2021-03-30 13:29:49
2021-04-03 13:29:49

jQuery 提供$.inArray

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


3.5年后编辑

$.inArray实际上是Array.prototype.indexOf支持它的浏览器(现在几乎所有浏览器)的包装器,同时在那些不支持的浏览器中提供垫片。它本质上等同于向 中添加一个 shim Array.prototype,这是一种更惯用的/JSish 做事方式。MDN 提供了这样的代码这些天我会选择这个选项,而不是使用 jQuery 包装器。


3年后再编辑

天哪,6.5 年?!

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

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

没有比较,也没有令人困惑的-1结果。它做我们想要的:它返回trueor false对于较旧的浏览器,它可以使用 MDN 上的代码进行 polyfill

干得好:

$.inArray('specialword', arr)

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

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

你可能想像这样使用它:

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

您可以使用for循环:

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}
虽然这是真的,但这真的不是他在这里说的话的重点。不要为了几棵树而忽视森林。
2021-03-18 13:29:49
@ChrisJones 鉴于 JS 业余爱好者会将这个答案复制并粘贴到他们的代码中,所以它应该更好
2021-03-26 13:29:49
我可能完全错了,但是您不想在 for 循环中声明 i 吗?如果你不把“var”放在前面,它会把它放在全局上下文中(我认为......),这可能不是你想要的。
2021-03-27 13:29:49

我不喜欢$.inArray(..),这是大多数理智的人不会容忍的那种丑陋的、jQuery 风格的解决方案。这是一个片段,它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);
}
(我不是downvoter)我不确定我是否理解 $.inArray 的嘲笑,同时包装依赖于 $(selector).each() 的方法。实际的 inArray 代码只是将 indexOf 用于本机支持它的浏览器,或者在不支持时使用像 Jared's answer 这样的 for 循环。对我来说似乎非常优雅。
2021-03-20 13:29:49