在 JavaScript 中实现 `[1,2].contains(2)`

Implement `[1,2].contains(2)` in JavaScript

基本上我需要:

if( [1,2].contains(2) ) {...}

我很惊讶我找不到一个简单的解决方案。

是否可以将 contains 方法添加到 JavaScript 的列表类型?

优惠:

_.contains([1,2], 2);

不过_是JQuery,还是比较笨拙

您可以利用 indexOf

Array.prototype.contains = function(el) {
    return this.indexOf(el) > -1;
};

if([1, 2].contains(1)) { // Usage

试试 JQuery $.inArray(array,vale) 函数

$.inArray([1,2], 2)

它returns 数组中值的索引。它 returns -1 如果数组不包含该值。

您可以使用 indexOf:

if([1,2].indexOf(2) != -1){

现代浏览器有 Array#indexOf,正是这样做的;这是在新的(大概)ECMAScript 第 5 版规范中,但它已经在多个浏览器中使用多年。使用该页面底部“兼容性”部分中列出的代码可以支持旧版浏览器。

jQuery has a utility function为此:

$.inArray(value, array)

它returns 数组中值的索引。它 returns -1 如果数组不包含该值。

jQuery有几个有用的utility functions.

一个优秀的 JavaScript 实用程序库是 underscore.js:

其他一些框架:

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


SOURCE

if ( [1, 2].indexOf(2) != -1 ) {
  alert("2 is contained in [1, 2]"); 
}
else {
  alert("2 is not contained in [1, 2] (which is paradoxal...)"); 
}

这里有一个用array.indexOf()检查它的简单方法。

Tushar的解决方案是对的,但我建议这样做:

Object.defineProperty(Array.prototype, 'contains', {
    writable: true,
    configurable: true,
    enumerable: false,
    value: function(val) {
        return this.indexOf(val) !== -1;
    }
};

原因是很多库都依赖于构造

for (var i in array) ...

如果您在定义函数时未将可枚举 属性 设置为 false,那么所有此类循环也会遍及您的函数。 Enumerable = false 阻止了这种情况。