How to find if an array contains a specific string in JavaScript/jQuery?
有人能告诉我如何检测数组中是否出现"specialword"?例子:
1 2 3 4 5
| categories: [
"specialword"
"word1"
"word2"
] |
- 在纯JS中:stackoverflow.com/a/25765186/1320932
- pure js:categories.includes("特殊词")
- @PATZ注意纯JS,在IE(任何版本)链接中都不支持。
- @Foxontherock开始使用蒸腾器-不要担心任何事实检查,我可以使用这个属性之类的东西。
你真的不需要jquery。
1 2
| var myarr = ["I","like","turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1); |
Hint: indexOf returns a number, representing the position where the specified searchvalue occurs for the first time, or -1 if it never
occurs
或
1 2 3 4
| function arrayContains(needle, arrhaystack)
{
return (arrhaystack.indexOf(needle) > -1);
} |
值得注意的是,在IE<9中不支持EDCOX1 15的引用,但是jQuery的EDCOX1×16的函数即使对于那些旧版本也适用。
- 我不同意ie.microsoft.com/testdrive/html5/ecmascript5array/default.ht‌&8203;ml,我刚刚测试过它。
- 詹姆斯,正如我所指出的,那一页确实说它将在IE9中工作。你对9岁以下的孩子有用吗?我相信我已经遇到了IE7和IE8中缺少的这个特性,但实际上并没有进行测试;而是依赖developer.mozilla.org/en-us/docs/web/javascript/reference/…
- indexof在所有主要浏览器中都可用,ie<9除外。
- 那么'foo' in arr呢?
- @superuberduper:检查对象键是否存在:1 in ['a'] -> false1 in ['a', 'b'] -> true'length' in [] -> true,就像在JS中一样,数组本质上是一个带有数字键的对象。
- needsmorejquery.com
- 上帝…我非常讨厌IE——直到我找到我需要的那些达姆的客户不会升级到IE8,即使在2018!!!!!!!
- @詹姆斯很好的解决方案。我真的很喜欢你用"我喜欢海龟"。对于分割和加入演示也很好。
jquery提供$.inArray:
注意,in array返回找到的元素的索引,因此0指示元素是数组中的第一个。-1表示找不到元素。
1 2 3 4 5 6 7
| 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 |
1
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> |
3.5年后编辑
$.inArray实际上是Array.prototype.indexOf在支持它的浏览器(现在几乎所有浏览器)中的一个包装器,而在不支持它的浏览器中提供一个填充程序。它实质上相当于在Array.prototype中添加一个填充程序,这是一种更惯用的/jsish方式。MDN提供此类代码。这些天,我会选择这个选项,而不是使用jquery包装器。
1 2 3 4 5 6 7
| 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年后再编辑
gosh,6.5年?!< /Sub >
在现代JavaScript中,最好的选择是Array.prototype.includes:
1
| var found = categories.includes('specialword'); |
没有比较,也没有混淆的-1结果。它做我们想要的:它返回true或false。对于旧的浏览器,它可以使用MDN上的代码进行多填充。
1 2 3 4 5 6 7
| 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 |
- 如何在in array()内传递categories数组?(这是来自JSON提要的数据)下面是一个如何获取链接的示例,它可以工作(但不是数组):var link=post.permalink;。使用post.categories在console.log中返回此错误:"无法将空值转换为对象"。
- @科菲,我不知道没有更多的密码。解析JSON很难不看到它,而且这不是真正的问题…
- 有些浏览器还支持.indexOf:developer.mozilla.org/en/javascript/reference/global_objects&zwnj;&8203;/&hellip(不确定IE)。
- @费利克斯确实如此,因此"至少是作为后援"。当然,jquery使用本机EDOCX1(如果存在的话)。
- 我在上面的评论中用我的问题创建了一个新的帖子。如果你能看一下那就太好了!stackoverflow.com/questions/6117008/&hellip;
- 请注意,为了返回-1以外的结果,$.inArray必须与整个数组项值匹配。例如,'specialword'匹配,但'special'不匹配。
- -1纯JS不需要循环,请参阅james answer,您可以非常简单地在本机上执行它['ab'、'bc'、'ca']。indexof('bc')==1
- @lex"作为备份"。当写下这个答案时,您不能确信indexof方法会出现。可以说,现在仍然是这样。
- @朗索梅迪公平点,它将失败在IE8,有些人仍然支持。可能值得更新答案,尽管旧的答案仍然被接受。
- @Lonesomeday更新了答案,并试图取消投票,但显然为时过早,无法改变我的想法。
- 尽管这样,我还是建议不要使用jquery样式
- 我用$.inArray('string', arr)替换了arr.indexOf('string');,以确保它在旧浏览器(特别是IE8)上工作,我说得对吗?一切都好吗?
- 有人知道罗达什的当量是多少?我在看罗达什的医生,似乎找不到。
- @Vyga是_.indexOf。
- 我很好奇,"in"操作符为什么不工作呢?
- @Stealthysnacks in测试键,而不是值。所以"0" in [15, 1]返回true,因为数组中存在一个0键。
- 好吧,我想你会一直坚持这个答案。寂寞日
- @MDW7326有一个小的"编辑"按钮,欢迎任何人按下!-)
- 《寂寞日》感谢上次的编辑——包括(),它似乎比使用索引软件要好得多,而且我有一种不必关心老浏览器的奢侈。:)
- 包括工作良好,应该是公认的答案。
- EDCOX1 11的工作原理很好,但是值得注意的是,它也适用于其他类似数组的对象,也适用于字符串。
- 该死的伊江!!!!!
- array.includes()节省时间和精力只需确保将有效的文件扩展名放入数组
干得好:
1
| $.inArray('specialword', arr) |
此函数返回一个正整数(给定值的数组索引),如果在数组中找不到给定值,则返回-1。
现场演示:http://jsfiddle.net/simevidas/5gdfc/
您可能想这样使用:
1 2 3
| if ( $.inArray('specialword', arr) > -1 ) {
// the value is in the array
} |
您可以使用for循环:
1 2 3 4 5 6 7
| var found = false;
for (var i = 0; i < categories.length && !found; i++) {
if (categories[i] ==="specialword") {
found = true;
break;
}
} |
- 在这个问题上我可能完全错了,但是你不想声明我在for循环中吗?如果您不把"var"放在前面,它将把它放在全局上下文中(我认为…),这可能不是您想要的。
- 虽然这是真的,但这并不是他在这里说的重点。不要因为几棵树而忽视森林。
- @Chrisjones认为JS业余爱好者会将这个答案复制并粘贴到他们的代码中,所以最好是这样。
我不喜欢$.inArray(..),这是一种大多数理智的人无法容忍的丑陋的jquery式解决方案。下面是一个片段,它为您的兵工厂添加了一个简单的contains(str)方法:
1 2 3 4 5 6 7 8 9
| $.fn.contains = function (target) {
var result = null;
$(this).each(function (index, item) {
if (item === target) {
result = item;
}
});
return result ? result : false;
} |
同样,您可以将EDOCX1[1]包装为一个扩展:
1 2 3
| $.fn.contains = function (target) {
return ($.inArray(target, this) > -1);
} |
- 我喜欢你的inarray包装,但我会把它作为链接的合适插件。(函数($)…..您的代码…..}(jQuery);
- (我不是向下投票者)在总结依赖于$(selector).each()的方法时,我不确定是否理解对$.inarray的嘲笑。实际的inarray代码只是为支持它的浏览器使用indexof,或者在不支持它的情况下使用for循环,就像jared的答案一样。在我看来非常优雅。