如何解决有没有一种方法可以使用通配符属性来过滤对象数组?
给出以下内容:
const cars = [
{
make: 'BMW',model: 'E46',year: 2002,},{
make: 'Toyota',model: 'Altis',year: 2009,{
make: 'Chevrolet',model: 'Camaro',year: 1969,model: 'Silverado',];
const filters = [
{
type: 'make',payload: 'Chevrolet',{
type: 'year',payload: 2002,];
如何filter
cars
使用类似下面的代码?
let filteredCars = [];
filters.forEach(filter => filteredCars = cars.filter(car => car.[filter.type] === car.[filter.payload]));
解决方法
使用filter
和some
来匹配任何过滤器
cars.filter((o) => filters.some((f) => o[f.type] == f.payload))
const cars = [ { make: "BMW",model: "E46",year: 2002 },{ make: "Toyota",model: "Altis",year: 2009 },{ make: "Chevrolet",model: "Camaro",year: 1969 },model: "Silverado",];
const filters = [ { type: "make",payload: "Chevrolet" },{ type: "year",payload: 2002 },];
res = cars.filter((o) => filters.some((f) => o[f.type] == f.payload));
console.log(res);
或使用filter
和every
来匹配所有个过滤器
res = cars.filter((o) => filters.every((f) => o[f.type] == f.payload));
const cars = [ { make: "BMW",];
let res = cars.filter((o) => filters.every((f) => o[f.type] == f.payload));
console.log(res);
,
首先,编写一个使单个汽车与单个过滤器匹配的谓词。
function carMatchesFilter(car,filter) {
return car[filter.type] === filter.payload;
}
如果我们想包括与所有过滤器匹配的汽车,我们将编写
const filteredCars = cars.filter(car =>
filters.every(filter => carMatchesFilter(car,filter))
);
如果我们要包含与任何个过滤器匹配的汽车,则可以编写
const filteredCars = cars.filter(car =>
filters.some(filter => carMatchesFilter(car,filter))
);
,
我认为使用lodash
函数会很容易。
filteredCards = cars;
filters.forEach(function(element) {
filteredCards = _.filter(filteredCards,function(o) {
return o[element.type] == element.payload;
});
});
我希望这会有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。