我Array
从select
包含表的 ID 中获得以下内容:
var arreglo = ["1", "2", "4", "5"]
我想知道它"3"
是否包含在arreglo
. 在 Python 中可以这样做:
>>> arreglo = ['1', '2', '4', '5']
>>> '3' in arreglo
False
但是在 JavaScript 中从控制台尝试此操作,令人惊讶的是它的工作方式不同:
> var arreglo = ["1", "2", "4", "5"]
> "3" in arreglo
true
对MDN 文档进行一些研究后,我发现了问题(强调我的):
如果在指定对象上找到指定属性,则运算符
in
返回 true 。
实际上,arreglo
它具有属性(或索引)"3"
,这就是它返回 me 的原因true
:
> Object.keys(arreglo)
["0", "1", "2", "3"]
我的查询,我该怎么做才能验证一个对象是否包含在一个数组中?
您可以使用
indexOf
类函数Array
,它返回搜索到的对象所在的位置。如果不存在则返回
-1
,否则返回大于或等于的位置0
。您可以使用一个简单的脚本,例如:
尽管基于您的问题
¿Cómo saber si un objeto está contenido en un array?
,但对我来说,一个对象将是例如:现在,要确定对象是否存在,
"b"
可以通过:但是正如您评论的那样,对我来说,仅使用indexOf()方法就足够了:
arreglo.indexOf('3') > -1
在 MDN 上做一些研究,有一种
Array.prototype.includes()
为 EcmaScript 2016 (ES7) 提出的方法,如果数组包含指定的元素,它会返回一个布尔值:此方法接受可选的第二个参数,该参数指示将从哪个索引执行搜索(默认为 0)。
该方法是否会出现在 JavaScript 的下一个版本中还不是官方的,但如果是,这个答案会更相关,我认为这是对 Arrays 的一个很好的补充,因为它可以让我们清楚地表达我们的意图,这产生更具可读性的代码。目前可以在除 IE 和 Edge 之外的最常见浏览器的最新版本中对其进行测试(令人惊讶)。
在官方文档中,我们找到了以下polyfill:
如果您不关心是否与 IE6、7 或 8 浏览器兼容,则可以
indexOf
按照第一个答案中的说明使用 use。现在,如果您需要与“历史”浏览器兼容,您可以
indexOf
自己实现它。以下代码可以安全地添加到您的代码中,因为如果indexOf
定义了它,它就没有任何效果:注意:此实现
indexOf
最初由Daniel James发布。考虑到我们有:
解决方案 1 - 本机
我们有以下Array.prototype.indexOf()函数和文档:
实际使用:
解决方案 2 - 使用库
我们可以使用 3rd 方工具来实现此结果,例如:
- 使用jQuery
jQuery.inArray ()文档:
实际使用:
- 使用Underscore.js
_.indexOf()的文档:
实际使用: