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

如何在JavaScript/jQuery中查找数组是否包含特定字符串?,javascript,jquery,arrays,string,Javascript,Jquery,Arrays,String,有人能告诉我如何检测数组中是否出现“specialword”?例如: categories: [ "specialword" "word1" "word2" ] 给你: $.inArray('specialword', arr) 此函数返回一个正整数(给定值的数组索引),如果在数组中找不到给定值,则返回-1 现场演示: 您可能希望这样使用: if ( $.inArray('specialword', arr) > -1 ) { // the value

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

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

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

现场演示:

您可能希望这样使用:

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

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

var categoriesPresent=['word','word','specialword','word'];
变量categoriesNotPresent=['word','word','word'];
var foundPresent=$.inArray('specialword',categoriesPresent)>-1;
var foundNotPresent=$.inArray('specialword',categoriesNotPresent)>-1;
console.log(foundPresent,foundNotPresent);//真假

您可以为循环使用

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}
var-found=false;
对于(变量i=0;i
我不喜欢
$。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);
}

您真的不需要jQuery来完成这个任务

var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);
提示:indexOf返回一个数字,表示指定的搜索值第一次出现的位置,如果从未出现,则返回-1 发生


值得注意的是,
array.indexOf(…)
在IE<9中不受支持,但是jQuery的
indexOf(…)
函数即使在那些较旧的版本中也能工作

如何传入inArray()中的categories数组?(这是来自JSON提要的数据)下面是一个如何获取链接的示例,它可以工作(但不是数组):var link=post.permalink;。使用post.categories在console.log中返回此错误:“无法将null转换为对象”。@Cofey如果没有更多代码,我不知道。解析你的JSON是很困难的,没有看到它,这不是真正的问题…@Vyga,是的。好吧,我想你一直在维护这个答案@lonesomeday@lonesomeday感谢您最后的编辑-includes()似乎比使用indexOf要好得多,我有幸不用关心较旧的浏览器。:)James,正如我指出的,那个页面确实说它将在IE9中工作。你在IE<9的时候用过吗?我相信我在IE7和IE8中遇到了这个特性,但实际上并没有进行测试;相反,我依赖的是indexOf在所有主要浏览器中都可用,除了IE<9Arr
中的
'foo'?@SuperUberDuper:检查对象键是否存在:
1 in['a']->false
1 in['a',b']->true
in[]->true
在JS中,数组本质上是一个带有数字键的对象。我可能完全错了,但你不想在for循环中声明I吗?如果你不把“var”放在前面,它会把它放在全局上下文中(我想…),这可能不是你想要的。虽然这是真的,但这并不是他在这里说的重点。不要因为几棵树而忽略森林。@ChrisJones考虑到JS业余爱好者会将这个答案复制并粘贴到他们的代码中,它越像你的inArray包装器,但我会让它成为链接的合适插件。。(函数($){……您的代码……})(jQuery);(我不是向下投票人)我不确定我是否理解$.inArray在包装依赖$(选择器).each()的方法时所受到的嘲笑。实际的inArray代码只是在本地支持indexOf的浏览器中使用indexOf,或者在不支持indexOf的浏览器中使用类似于Jared答案的for循环。在pure JS:pure JS:categories.includes(“specialword”)@patz注意pure JS,IE(任何版本)都不支持@foxontherock开始使用transpiler-不要再担心任何事实检查了,can-I-use-this-property之类的东西。
function arrayContains(needle, arrhaystack)
{
    return (arrhaystack.indexOf(needle) > -1);
}