我尝试使用另一个数组作为我的过滤器源将过滤器应用于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
}
});
答案 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;
});
答案 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/