Javascript 使用$.grep如何使用另一个数组作为筛选源筛选数组

Javascript 使用$.grep如何使用另一个数组作为筛选源筛选数组,javascript,jquery,json,Javascript,Jquery,Json,我正试图使用另一个数组作为筛选源,将筛选应用于JSON数组。最有效的方法是什么 这是我的代码:我的目标是提取employeeFilter数组中雇员ID与employeeFilter数组中相同的所有元素。类似于SQL,其中employeeId位于(1,2)中 var员工=[{ id:1, 姓名:“约翰” }, { id:2, 姓名:“保罗” }, { id:3, 姓名:“玛丽” }]; var employeeFilter=[1,2]; emps=$.grep(员工,职能(价值,i){ 对于(j=

我正试图使用另一个数组作为筛选源,将筛选应用于JSON数组。最有效的方法是什么

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

var员工=[{
id:1,
姓名:“约翰”
}, {
id:2,
姓名:“保罗”
}, {
id:3,
姓名:“玛丽”
}];
var employeeFilter=[1,2];
emps=$.grep(员工,职能(价值,i){
对于(j=0;j
最有效的方法可能是根本不使用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;
});

最有效的方法可能是根本不使用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;
});

这是因为您总是在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;
});
var员工=[{
id:1,
姓名:“约翰”
}, {
id:2,
姓名:“保罗”
}, {
id:3,
姓名:“玛丽”
}];
var employeeFilter=[1,2];
emps=$.grep(员工、职能(价值){
var结果=假;
对于(j=0;j

演示

这是因为您总是在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;
});
var员工=[{
id:1,
姓名:“约翰”
}, {
id:2,
姓名:“保罗”
}, {
id:3,
姓名:“玛丽”
}];
var employeeFilter=[1,2];
emps=$.grep(员工、职能(价值){
var结果=假;
对于(j=0;j

演示

请注意,至少在Internet Explorer 8及以下版本(请参见此处:)中不支持Array.filter,但好消息是,您可以使用MDN页面中的polyfill解决此问题。
Array.indexOf
也是如此。如果需要对IE8的支持,就必须使用polyfill,但是我们应该停止支持那些旧的废话。我完全同意你的观点!这就是为什么我对你的答案投了赞成票。这只是一个“以防万一”的通知:)请注意,Array.filter至少在Internet Explorer 8及以下版本中不受支持(请参见此处:),但好消息是,您可以使用MDN页面中的polyfill解决此问题。
Array.indexOf
。如果需要对IE8的支持,就必须使用polyfill,但是我们应该停止支持那些旧的废话。我完全同意你的观点!这就是为什么我对你的答案投了赞成票。那只是一个“以防万一”的通知:)