为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查数组是否包含JavaScript中的对象?

如何检查数组是否包含JavaScript中的对象?

繁花不似锦 2019-05-22 14:00:37
如何检查数组是否包含JavaScript中的对象?找出JavaScript数组是否包含对象的最简洁有效的方法是什么?这是我知道的唯一方法:function contains(a, obj) {     for (var i = 0; i < a.length; i++) {         if (a[i] === obj) {             return true;         }     }     return false;}有没有更好,更简洁的方法来实现这一目标?这与Stack Overflow问题密切相关问题在JavaScript数组中查找项目的最佳方法是什么?它使用的方法寻找数组中的对象indexOf。
查看完整描述

5 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

ECMAScript 7介绍Array.prototype.includes

它可以像这样使用:

[1, 2, 3].includes(2); // true[1, 2, 3].includes(4); // false

它还接受可选的第二个参数fromIndex

[1, 2, 3].includes(3, 3); // false[1, 2, 3].includes(3, -1); // true

不像indexOf,它采用严格相等比较includes比较了使用SameValueZero平等算法。这意味着您可以检测数组是否包含NaN

[1, 2, NaN].includes(NaN); // true

也不像indexOfincludes不跳过缺失的索引:

new Array(5).includes(undefined); // true

目前它仍然是草稿,但可以填充以使其适用于所有浏览器。


查看完整回答
反对 回复 2019-05-22
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

b是值,a是数组。它返回truefalse

function(a, b) {
    return a.indexOf(b) != -1}


查看完整回答
反对 回复 2019-05-22
?
慕村225694

TA贡献1880条经验 获得超4个赞

目前的浏览器都有Array#includes,这不正是那个,得到广泛支持,并具有填充工具旧版本浏览器。

> ['joe', 'jane', 'mary'].includes('jane');true

您也可以使用Array#indexOf,这不是直接的,但不要求Polyfills用于过时的浏览器。

jQuery提供$.inArray,功能相当于Array#indexOf

underscore.js,一个JavaScript实用程序库,提供_.contains(list, value)别名_.include(list, value),如果传递了JavaScript数组,它们都在内部使用indexOf

其他一些框架提供了类似的方法:

请注意,某些框架将此实现为函数,而其他框架则将该函数添加到数组原型中。


查看完整回答
反对 回复 2019-05-22
?
慕森王

TA贡献1777条经验 获得超3个赞

indexOf 也许,但它是“ECMA-262标准的JavaScript扩展;因此它可能不会出现在标准的其他实现中。”

例:

[1, 2, 3].indexOf(1) => 0["foo", "bar", "baz"].indexOf("bar") => 1[1, 2, 3].indexOf(4) => -1

AFAICS 微软并没有提供某种替代的这一点,但你可以到(不支持和其他浏览器Internet Explorer中的阵列加入类似的功能indexOf),如果你想作为一个快速谷歌搜索发现(例如,这一个)。


查看完整回答
反对 回复 2019-05-22
  • 5 回答
  • 0 关注
  • 3152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信