Tengo un objeto que puede ser nulo o indefinido si aún no se ha creado. No tengo control de este objeto, pero devuelve una lista de autos. Mantengo la lista de autos en mi variable de autos:
let cars = myClass?.getCars(); /* cars will be an array of objects cars: [obj1, obj2, obj3...]. the objects have functions: obj1.getRegion() => can return "North America", "Europe", "Asia", "Latin America", or "Global" obj1.getCarName() => returns car name. For instance, "BMW", "Lexus", "Ford"... */También tengo un objeto que devuelve una lista de regiones.
let regions = myObj?.getRegions(); Luego, quiero filtrar mi matriz de cars para devolver solo los autos de la lista de regions o todos los autos si las regions variables contienen "Global".
let cars = myClass?.getCars(); let regions = myObj.getRegions(); // check if Global region is selected let isGlobal = false; regions.every(region => { if(region.getName() === "Global") { isGlobal = true; return true; } return false; }); if(!isGlobal) { // How can I filter the cars array to return only cars from regions? }Para el filtro puedes hacer algo como
if(!isGlobal) { const regionNames = regions.map( region => region.getName() ) const filteredCars = cars.filter( car => regionNames.includes(car.getRegion())) } Y para que sea un poco más a prueba de errores, si getCars o getRegions no devuelven nada, puede inicializar esas matrices en la parte superior con algo como
let cars = myClass?.getCars() ?? []; let regions = myObj?.getRegions() ?? [];const myClass = null; const cars = myClass?.getCars() ?? []; const regions = myClass?.getRegions() ?? []; const validRegions = regions.filter(region => region?.getName() ); const isGlobal = validRegions.some(region => region?.getName() === 'Global'); const filteredCars = isGlobal ? cars : cars.filter(car => validRegions.some(region => region?.getName() === car?.getRegion()));Elimine los valores falsos de los nombres de las regiones usando el filtro y puede comparar la región del automóvil y el nombre de la región