我的代码如下:
import { filter_names } from './search/filterActions';
export const string_names = {
diesel: 'diesel',
benzine: 'benzine',
transmissionManual: 'manual',
transmissionAutomatic: 'automatic'
};
function filterItem(filter, car) {
switch(filter.name) {
case filter_names.priceRange:
return filter.values.filter((v) => v.active).every((v) => (car.price <= v.high && car.price >= v.low));
case filter_names.mileage:
return filter.values.filter( v => v.active).every( v => (car.mileage >= v.low && car.mileage <= v.high));
case filter_names.year:
return filter.values.filter(v => v.active).every(v => (parseInt(car.initialRegistration.substr(car.initialRegistration.length - 4)) >= v.low && parseInt(car.initialRegistration.substr(car.initialRegistration.length - 4)) <= v.high));
case filter_names.fuel:
return filter.values.every(v => {
if(v.checkboxBenzine && v.checkboxDiesel) return car;
if(v.checkboxBenzine) return car.fuel.toLowerCase() == string_names.benzine;
if(v.checkboxDiesel) return car.fuel.toLowerCase() == string_names.diesel;
});
case filter_names.transmission:
return filter.values.every(v => {
if(v.checkboxManual && v.checkboxAutomatic) return car;
if(v.checkboxAutomatic) return car.transmission.toLowerCase() == string_names.transmissionAutomatic;
if(v.checkboxManual) return car.transmission.toLowerCase() == string_names.transmissionManual;
});
case filter_names.make:
//console.log(filter);
//console.log(car);
console.log(filter.values.filter(v => v).every(v => car.make.indexOf(v.model) !== -1));
return true;
default:
return true;
}
}
export function filterCars(cars, filters){
if(!filters) return cars;
return cars.filter((car) => filters.every((filter) => filterItem(filter, car)));
}
参数过滤器和汽车如下:
let filter = {
name: "MAKE", values: [{ Golf: {active: true, make: "Volkswagen", model: "Golf"},
Passat: {active: true, make: "Volkswagen", model: "Passat"},
Q5: {active: true, make: "Audi", model: "Q5"}
}
]
}
let cars = [
{id: 20,make: "Audi"},
{id: 21, make: "Skoda"},
{id: 22,make: "Audi Q5"},
{id: 23,make: "A1"},
{id: 24,make: "Volkswagen Skoda"},
{id: 25,make: "Audi A7"},
{id: 26,make: "Audi A5"}
]
如何循环过滤器并检查汽车中是否存在过滤器值中的任何模型?
我在 filter_names.make 案例中遇到问题。
在这种情况下,想要的结果是:[{id: 22,make: "Audi Q5"}]
答案 0 :(得分:1)
根据你的情况:
&#34;检查汽车制造&#34;
中是否存在来自过滤器值的任何模型
使用Object.keys
和Array.some
函数的解决方案:
var values = filter.values[0],
carExists = Object.keys(values).some(function (k) {
return (values[k].make + " " + values[k].model) === cars.make;
});
console.log(carExists); // true