问题

什么是最简洁有效的方式来确定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#indexOf < / a>,这可以做到.即使是更新的浏览器, Array#包括 ,但确实 ,但不幸的是它不被广泛支持.旧版浏览器可以使用此polyfill < / a>.

jQuery提供 $.inArray ,这在功能上等效到 Array#indexOf .

underscore.js (一种JavaScript实用程序库)提供 _.contains(list,value) ,alias _.include(list,value)如果传递了JavaScript数组,请在内部使用 indexOf .

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

请注意,一些框架将此作为函数实现,而其他框架将函数添加到数组原型.

Languages that compile to JavaScript

CoffeeScript ,运算符中的等效于 contains :

a = [1, 2, 3, 4]
alert(2 in a)

Dart :

var mylist = [1, 2, 3];
assert(mylist.contains(1));
assert(mylist.indexOf(1) == 0);



相关问题推荐