如何过滤具有可变参数的javascript对象数组
How to filter a javascript object array with variable parameters
我想根据对象的属性选择对象,但不总是相同的属性。换句话说:
arr = [
{ name: "joe", age21: 1 },
{ name: "nick", age21: 0 },
{ name: "blast", age21: 1 }
];
arr.filter(function(item) {
return (item.name === "nick" && item.age21 === 1);
});
但有时我只想过滤名称例如:
arr.filter(function(item) {
return (item.name === "nick");
});
我想做的是泛化这一点,以便参数列表可以传递给函数。我想出了以下方法,但速度很慢,我想知道是否有更好的方法:
filterParams = function(arr, params) {
var new_array = arr.filter(function(item) {
var select = 1
for(obj in params) { //create the filter criteria based on varying set of parameters
var select = select && params[obj] === item[obj];
}
return select;
});
return new_array;
}
那么你可以用:filterParams(arr, {name: "nick", age21: 1});
或:filterParams(arr, {name: "nick"});
这两种方式都可以
如果你想知道,我这样做是因为我有不同的数据集,我想通过相同的例程运行,所以过滤器属性需要一般化,这样我就可以过滤特定于每个数据集的属性。
谢谢!
这是一个函数式方法,它应该适用于给定对象的任意数量的属性:
function filter(arr, criteria) {
return arr.filter(function(obj) {
return Object.keys(criteria).every(function(c) {
return obj[c] == criteria[c];
});
});
}
例如:var arr = [
{ name: 'Steve', age: 18, color: 'red' },
{ name: 'Louis', age: 21, color: 'blue' }, //*
{ name: 'Mike', age: 20, color: 'green' },
{ name: 'Greg', age: 21, color: 'blue' }, //*
{ name: 'Josh', age: 18, color: 'red' }
];
console.log(filter(arr, { age: 21, color: 'blue' }));
//^ {age:21, color:'blue', name:'Louis}
// {age:21, color:'blue', name:'Greg'}
不确定你的性能问题,但这应该没问题。
Edit:您可以使用正则表达式使其更强大,例如:
function filter(arr, criteria) {
return arr.filter(function(obj) {
return Object.keys(criteria).every(function(c) {
return new RegExp(criteria[c]).test(obj[c]);
});
});
}
console.log(filter(arr, { age: /^2'd$/, color: /^(red|blue)$/ }));
//^ Louis, Greg --^-- twenty-something
// ----^---- red OR blue
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- Lodash _.debounce 具有唯一参数变体的单独队列
- 当使用多个值调用时,某些 mixin 参数保持不变
- 多次定义参数时获取 URL 参数值
- 通过 Ajax 获取 PHP 变量值,变量名称作为参数
- JavaScript无法从给定的参数中获取正确的变量值
- 没有参数的jQuery outerHeight()函数返回对象而不是参数值
- 将变量值传递给锚标记中的 href 参数
- 将参数附加到URL地址在多个函数中不起作用(第二个函数不变)
- 如何在不调用函数的情况下向函数实参添加参数
- 根据已有参数值向json中添加参数
- 当不指定url参数时,设置默认url参数值
- 试图保持输入参数不变
- 如何将范围变量值作为 FormName 传递给 ng-click 参数并获取 FormName.$valid 和 For
- 在DistanceMatrixStatus中传递参数回调或设置变量值