在 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:
_.contains(list, value)
, alias _.include(list, value)
(underscore's contains/include uses indexOf 内部如果传递了 JavaScript 数组)。
其他一些框架:
- Dojo 工具包:
dojo.indexOf(array, value, [fromIndex, findLast])
documentation. Dojo has a lot of utility functions, see http://api.dojotoolkit.org.
- 原型:
array.indexOf(value)
documentation
- MooTools:
array.indexOf(value)
documentation
- MochiKit:
findValue(array, value)
documentation
- MS Ajax:
array.indexOf(value)
documentation
- 分机:
Ext.Array.indexOf(array, value, [from])
documentation
请注意,一些框架将其实现为函数,而其他框架将函数添加到数组原型中。
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 阻止了这种情况。
基本上我需要:
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:
_.contains(list, value)
, alias_.include(list, value)
(underscore's contains/include uses indexOf 内部如果传递了 JavaScript 数组)。
其他一些框架:
- Dojo 工具包:
dojo.indexOf(array, value, [fromIndex, findLast])
documentation. Dojo has a lot of utility functions, see http://api.dojotoolkit.org. - 原型:
array.indexOf(value)
documentation - MooTools:
array.indexOf(value)
documentation - MochiKit:
findValue(array, value)
documentation - MS Ajax:
array.indexOf(value)
documentation - 分机:
Ext.Array.indexOf(array, value, [from])
documentation
请注意,一些框架将其实现为函数,而其他框架将函数添加到数组原型中。
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 阻止了这种情况。