使用$ .grep如何使用另一个数组作为过滤器源过滤数组

时间:2014-08-26 10:01:46

标签: javascript jquery json

我尝试使用另一个数组作为我的过滤器源将过滤器应用于JSON数组。最有效的方法是什么?

这是我的代码:我的目标是提取雇员数组的所有元素,其中雇员ID与employeeFilter数组中的相同。与SQL类似,其中employeeId在(1,2)。

var employees = [{
    id: 1,
    name: "john"
}, {
    id: 2,
    name: "paul"
}, {
    id: 3,
    name: "mary"
}];

var employeeFilter = [1, 2];

emps = $.grep(employees, function (value, i) {
    for (j = 0; j < employeeFilter.length; j++) {
        return (value.id == employeeFilter[j]); // not working
    }
});

2 个答案:

答案 0 :(得分:2)

效率最高的可能是根本不使用jQuery,而是Array.filter

var employees = [{
    id: 1,
    name: "john"
}, {
    id: 2,
    name: "paul"
}, {
    id: 3,
    name: "mary"
}];

var employeeFilter = [1, 2];

var emps = employees.filter(function(employee) {
    return employeeFilter.indexOf(employee.id) != -1;
});

FIDDLE

答案 1 :(得分:2)

这是因为您总是在employeeFilter的第一次迭代中返回,而不会与employeeFilter中的其他值匹配。一个小的改变,它将按要求工作:

var employees = [{
    id: 1,
    name: "john"
}, {
    id: 2,
    name: "paul"
}, {
    id: 3,
    name: "mary"
}];

var employeeFilter = [1, 2];

emps = $.grep(employees, function (value) {
    var result = false;
    for (j = 0; j < employeeFilter.length; j++) {
        result = (value.id == employeeFilter[j]); 
        if(result)
            break;
    }
    return result;
});

<强>演示http://jsfiddle.net/ugze6dew/