1

形式の2次元配列があります

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

次のような単純な関数を使用して、特定の数 (> 5 など) より大きい値が 3 番目の列に存在するかどうかを確認します。

  ($.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 に答える