Mein Code ist wie folgt:Filtering Objekt mit einem anderen Objekt in JavaScript
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)));
}
Der Parameter Filter und Autos sind wie folgt:
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"}
]
Wie kann ich durch Filter Schleife und prüfen, ob jedes Modell aus Filterwerten besteht in Autos machen?
Ich habe ein Problem in filter_names.make Fall.
Das gewünschte Ergebnis ist in diesem Fall: [{id: 22,make: "Audi Q5"}]
was hast du probiert? Wie sollte das Ergebnis aussehen? Wie sollte der Filter funktionieren? Warum ist 'Autos' kein Array? –
Schleife durch 'filter.values' und überprüfe' jedes' Modell mit cars.make. z.B. 'cars.make == this.model' – BCoder
@NinaScholz Aktualisiert. – Boky