找出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。
目前的浏览器都有Array#includes,这不正是那个,得到广泛支持,并具有填充工具旧版本浏览器。
['joe', 'jane', 'mary'].includes('jane'); true
您也可以使用Array#indexOf,它不太直接,但对于过期的浏览器不需要Polyfills。
jQuery提供的$.inArray功能在功能上等效于Array#indexOf。
underscore.js是一个JavaScript实用工具库,提供_.contains(list, value),alias _.include(list, value),如果传递了JavaScript数组,则两者都在内部使用indexOf。
其他一些框架提供了类似的方法:
Dojo工具包: dojo.indexOf(array, value, [fromIndex, findLast])
原型: array.indexOf(value)
MooTools: array.indexOf(value)
MochiKit: findValue(array, value)
MS Ajax: array.indexOf(value)
分机: Ext.Array.contains(array, value)
Lodash: _.includes(array, value, [from])(是_.contains现有4.0.0)
Ramda: R.includes(value, array)
ECMAScript 2016: array.includes(value)
注意,有些框架将此功能实现为函数,而其他框架则将该函数添加到数组原型中。
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。