簡體   English   中英

將參數傳遞給jquery $ .grep

[英]passing parameter to jquery $.grep

如果我有這段代碼可以檢查數組內部是否已經存在

var array = [ 1, 5, 12, 31, 7, 69 ];

var array = $.grep(array, function(n, i) {
  return (n == 112);
});

alert(array.length);

我的問題很簡單:如何將變量傳遞給此grep函數並使用它而不是表達式中的硬編碼112值?

您可以只從外部傳遞變量。 JavaScript的詞法作用域允許將外部作用域中的變量傳遞給更深層的函數。

http://jsfiddle.net/ag1djcjm/

var array = [ 1, 5, 12, 31, 7, 69];
var code = 112;

// No need to declare variables twice
array = $.grep(array, function(n, i) {
  return (n == code);
});

alert(array.length);

這樣嘗試

var array = [ 1, 5, 12, 31, 7, 69 ];

var val=112;
// remove var from here it'll re-declare same variable
array = $.grep(array, function(n, i) {
  return (n == val);
});

alert(array.length);

JSFIDDLE

您也可以通過javascript的.filter()來完成此操作

像這樣

var array = [ 1, 5, 12, 31, 7, 69 ];
var val=112;
array = array.filter(function(n) { return n == val; });
alert(array.length);

JSFIDDLE

只需在調用$ .grep函數之前定義需要過濾的值即可。 見下面的例子

var array = [1, 5, 12, 31, 7, 69],
    filterValue = 5;

var newArray = $.grep(array, function (n, i) {
    return n == filterValue;
});

由於您正在重新定義數組,因此我創建了一個新變量newArray並為其分配了過濾后的值,但是您仍然可以將其分配給array變量。

碼:

function filter ( data, val ) {
    return $.grep(data, function ( n, i ) {
        return (n == val);
    });
}

測試:

var array = [ 1, 5, 12, 31, 7, 69];
var test = filter(array, 112);
alert(test.length);

因此,您基本上要嘗試執行的操作是確定數字數組是否包含某個數字(變量)。

無需使用grep使其過於復雜。 只需使用indexOf

 var array = [ 1, 5, 12, 31, 7, 69 ], search = 112, hasNumber = array.indexOf(search) !== -1; // Using this so that it's visible in the snippet. document.body.textContent = hasNumber; 

可以在$.grep()之外創建一個函數,以對數組中的每個項目調用該函數; 也可以傳遞其他參數來起作用。 也嘗試為輸入數組定義不同的變量名,結果數組

var array = [ 1, 5, 12, 31, 7, 69 ], num = 112
, compare = function(n, i) { return n === num }

var res = $.grep(array, compare);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM