1

我有一个二维数组的格式

emi_309 | weak   | 16
emi_310 | strong | 9
emi_319 | medium | 8
emi_315 | weak   | 5

我想使用如下所示的简单函数检查第三列中是否存在大于某个数字(例如> 5)的值:

  ($.inArray( conditions greater than 5 here, $.map(myArray, function(v) { return v[2]; })) > -1)

如何在上述函数中包含条件 (>5)?

非常感谢你的帮助

4

3 回答 3

7

$.grep在这种情况下最好使用:

if ($.grep(myArray, function(v) { return v[2] > 5; }).length) {
    // values > 5 exist
}
于 2013-02-12T12:05:01.067 回答
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){
}
于 2013-02-12T12:21:10.927 回答
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) { ... }
于 2013-02-12T12:36:14.987 回答