我有一个格式为
的二维数组emi_309 | weak | 16
emi_310 | strong | 9
emi_319 | medium | 8
emi_315 | weak | 5
我想使用如下的简单函数检查第3列中是否存在大于某个数字(例如> 5)的值:
($.inArray( conditions greater than 5 here, $.map(myArray, function(v) { return v[2]; })) > -1)
如何在上述函数中包含条件(> 5)?
非常感谢你的帮助
答案 0 :(得分:6)
在这种情况下最好使用$.grep
:
if ($.grep(myArray, function(v) { return v[2] > 5; }).length) {
// values > 5 exist
}
答案 1 :(得分:1)
$.inArray
仅针对特定值进行测试(检查相等性),因此在这种情况下它不会帮助您。
您可以更改inArray以便能够处理谓词,因为它是第一个参数。 像这样更改“基础库”应该仔细完成,您可能想要创建一个不同的功能。但是在这种特定情况下,我觉得传递函数的能力类似于其他jQuery函数
var org_inArray = $.inArray
$.inArray = function(value, array, fromIndex){
if($.isFunction(value)){
var start = fromIndex || 0,
matches = $.grep(myArray.slice(start), function(e,i) {
if(value(e,i)) return i;
}
return matches ? matches[0] : -1;
} else {
arguments.length > 2 ?
org_inArray.call($,value,array,fromIndex) :
org_inArray.call($,value,array)
}
}
然后你可以像
一样使用它if($.inArray( function(e) { return e[2] > 5;}, myArray) !== -1){
}
答案 2 :(得分:1)
这样的事情非常简单:
var firstMatch = function(arr, cond) {
for (var i = 0, len = arr.length; i < len; i++) {
if (cond(arr[i])) {return i;}
}
return -1;
};
if (firstMatch(myArray, function(v) { return v[2] > 5; }) > -1) { ... }
如果你真的想在jQuery命名空间中使用它,只需将它附加到jQuery:
jQuery.firstMatch = function(Arr, cond) { ...
并将其称为
if ($.firstMatch(myArray, function(v) { return v[2] > 5; }) > -1) { ... }