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

时间:2015-07-08 11:08:40

标签: javascript list integer contains

基本上我要求:

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

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

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

Underscore's similar functions: _.contains vs. _.some and _.map vs _.each提供:

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

然而,_是JQuery,它仍然相当笨拙。

6 个答案:

答案 0 :(得分:4)

您可以利用indexOf

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

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

答案 1 :(得分:3)

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) ...

如果定义函数而不将enumerable属性设置为false,那么所有这些循环也将通过您的函数进行迭代。 Enumerable = false可以防止这种情况。

答案 2 :(得分:2)

您可以使用indexOf

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

答案 3 :(得分:2)

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

jQuery has a utility function

$.inArray(value, array)

它返回数组中值的索引。如果数组不包含值,则返回-1。

jQuery有几个有用的utility functions

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

其他一些框架:

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

<强> SOURCE

答案 4 :(得分:1)

&#13;
&#13;
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...)"); 
}
&#13;
&#13;
&#13;

以下是使用array.indexOf()进行检查的简单方法。

答案 5 :(得分:0)

尝试使用JQuery $.inArray([1,2], 2) 函数

{{1}}

它返回数组中值的索引。如果数组不包含值,则返回-1。