4 回答
TA贡献1820条经验 获得超2个赞
您可以通过使用数据对象检查所有给定的键/值对来过滤数组。
var data = [{ name: 'abc', category: 'cat1', profitc: 'profit1', costc: 'cost1' }, { name: 'xyz', category: '', profitc: 'profit1', costc: '' }, { name: 'pqr', category: 'cat1', profitc: 'profit1', costc: '' }],
filters = [{ type: 'profitc', value: 'profit1', }, { type: 'category', value: 'cat1' }],
result = data.filter(o => filters.every(({ type, value }) => o[type] === value));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
TA贡献1847条经验 获得超11个赞
-您istruecat
仅根据arr
. 您应该使用 reduce 来累积值:
let result = c.filter(e => arr.reduce((acc, element) => acc && e[element.type] === element.value, true))
TA贡献1876条经验 获得超6个赞
这是c通过过滤器数组根据给定值减少列表的实现arr。请注意,输出是基于 中的初始内容的新列表c。
result = arr.reduce((acc, curr) => {
acc = acc.filter(item => {
return item[curr.type] === curr.value;
});
return acc;
}, c);
TA贡献1797条经验 获得超6个赞
或者一个递归和imo可读的解决方案:
function myFilter(c, [first, ...rest]) {
if (first) {
const {type, value} = first;
// Recursively call myFilter with one filter removed
return myFilter(c, rest)
.filter(x => x[type] === value);
} else {
// Nothing left to filter
return c;
}
}
myFilter(c, arr);
添加回答
举报