基本上我要求:
if( [1,2].contains(2) ) {...}
我很惊讶我无法找到一个简单的解决方案。
是否可以在JavaScript的列表类型中添加contains
方法?
Underscore's similar functions: _.contains vs. _.some and _.map vs _.each提供:
_.contains([1,2], 2);
然而,_是JQuery,它仍然相当笨拙。
答案 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:
_.contains(list, value)
,别名_.include(list, value)
(如果传递了JavaScript数组,则下划线&包含/包含内部使用indexOf)。 其他一些框架:
dojo.indexOf(array, value, [fromIndex, findLast])
documentation。 Dojo有很多实用功能,请参阅http://api.dojotoolkit.org。array.indexOf(value)
documentation array.indexOf(value)
documentation findValue(array, value)
documentation array.indexOf(value)
documentation Ext.Array.indexOf(array, value, [from])
documentation 请注意,某些框架将此实现为函数,而其他框架则将该函数添加到数组原型中。
<强> SOURCE 强>
答案 4 :(得分:1)
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;
以下是使用array.indexOf()进行检查的简单方法。
答案 5 :(得分:0)
尝试使用JQuery $.inArray([1,2], 2)
函数
{{1}}
它返回数组中值的索引。如果数组不包含值,则返回-1。