Javascript 基于对象的Lodash滤波
你知道如何在lodash中编写一个函数,用过滤器逐个过滤对象数组吗Javascript 基于对象的Lodash滤波,javascript,lodash,Javascript,Lodash,你知道如何在lodash中编写一个函数,用过滤器逐个过滤对象数组吗 const arr = [{a: 1, b:22, c:44, }, {a: 123, b: 33, c: 3}, {d: 'example'}]; //Behavior filters = { d: 'e' }; //result [{d: 'example'] filters = { b: 3, a: 1} //result [{a: 123, b: 33, c: 3}] filters = { b: 2, d: '
const arr = [{a: 1, b:22, c:44, }, {a: 123, b: 33, c: 3}, {d: 'example'}];
//Behavior
filters = { d: 'e' };
//result [{d: 'example']
filters = { b: 3, a: 1}
//result [{a: 123, b: 33, c: 3}]
filters = { b: 2, d: 'e' };
//result []
我的解决方案:
filterRows (originalRows, filters) {
filters = _.toPairs(filters);
return originalRows.filter(row =>
filters.every(([filterKey, filterValue]) => {
const rowValue = _.toLower(row[filterKey]),
filter = _.toLower(filterValue);
return rowValue.includes(filter);
})
);
}
但是也许有更干净的方法来写这个。A
non-lodash
解决方案:
filterRows (originalRows, filters) {
filters = _.toPairs(filters);
return originalRows.filter(row =>
filters.every(([filterKey, filterValue]) => {
const rowValue = _.toLower(row[filterKey]),
filter = _.toLower(filterValue);
return rowValue.includes(filter);
})
);
}
- 用于筛选出
对象
- 用于检查是否所有 要过滤的值通过条件传递
const arr=[{
答:1,,
b:22,
c:44,
}, {
a:123,
b:33,
c:3
}, {
d:‘例子’
}];
变量过滤器1={
d:‘e’
};
变量过滤器2={
b:3,
a:1
};
变量过滤器3={
b:2,
d:‘e’
};
函数过滤器对象(数组、过滤器){
var keys=Object.keys(过滤器);
返回数组.过滤器(函数(el){
返回键。每个(函数(k){
返回el[k]&&el[k].toString().indexOf(filter[k].toString())!=-1;
});
});
}
日志(filterObject(arr,filter1));
日志(filterObject(arr,filters2));
日志(filterObject(arr,filter3))代码>我想一个简单的纯JS函数就足够了
var arr=[{a:1,b:22,c:44,},{a:123,b:33,c:3},{d:'example'}],
过滤器1={d:'e'},
过滤器2={b:3,a:1},
filter3={b:2,d'e'},
filter=(a,f)=>a.filter(o=>{var-oks=Object.keys(f);
返回ok.every(k=>o[k]!==void 0&&(o[k]+).indexOf(f[k])!=-1;
});
日志(过滤器(arr,过滤器1));
日志(过滤器(arr,过滤器2));
日志(过滤器(arr,过滤器3))代码>你说得对。我的错误。第二个例子应该是:[{a:123,b:33,c:3}]