有人可以告诉我如何检测数组中是否出现"specialword"
吗?例如:
categories: [
"specialword"
"word1"
"word2"
]
答案 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
结果。它做我们想要的:它返回true
或false
。对于旧版浏览器,它是可填充的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);
}