有人能告诉我如何检测是否"specialword"
出现在数组中吗?例子:
categories: [
"specialword"
"word1"
"word2"
]
有人能告诉我如何检测是否"specialword"
出现在数组中吗?例子:
categories: [
"specialword"
"word1"
"word2"
]
你真的不需要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(...)
功能即使对于那些旧版本也能工作。
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
结果。它做我们想要的:它返回true
or 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;
}
}
我不喜欢$.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);
}