将参数传递给jquery$.grep

passing parameter to jquery $.grep

本文关键字:grep jquery 参数传递      更新时间:2023-09-26

如果我有这段代码,它会检查数组中是否已经存在某种东西

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来使这件事过于复杂。只需使用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],
    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()之外创建一个函数,为数组中的每个项调用;还可以将附加参数传递给函数。还可以尝试为输入数组定义不同的变量名,从而得到数组

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