Estoy tratando de filtrar una matriz de objetos comparándola con otra matriz recorriendo sus valores. El problema es que la función de filtro se detiene en el primer falso de forma predeterminada, por lo que si el bucle devuelve (falso, verdadero, falso) no pasará el filtro.
¿Hay alguna forma de evitar esto?
código (he puesto matrices y objetos simplificados en el código para el ejemplo):
const jobs = [ {id: 1, location: 'AA'}, {id: 2, location: 'BB'}, {id: 3, location: 'CC'}, ] const filteredLocations = ['AA', 'CC'] const filteredJobs = jobs.filter(function(el, i) { do { return el.location === filteredLocations[i]; } while (filteredLocations.length >= i) }) // this only returns the first object instead of the desired first and third¡Gracias!
Use la función .filter como se pretende, cualquier devolución se agregará a la matriz devuelta.
const jobs = [ {id: 1, location: 'AA'}, {id: 2, location: 'BB'}, {id: 3, location: 'CC'}, ] const filteredLocations = ['AA', 'CC'] const filteredJobs = jobs.filter(el => { return filteredLocations.includes(el.location); });nota al margen, su código tiene 2 problemas:
filteredLocations.length con la i (índice) del bucle de matriz de jobs , los jobs y las filteredLocations son 2 matrices diferentes, por lo que no tiene sentido hacerloEl filtro no se detiene al principio falso. Funciona correctamente pero no puede devolver el primer y el tercer objeto porque el tercer objeto está en el índice 2 y no tiene ningún elemento en filteredLocations en ese índice.
Le aconsejo que reemplace el bucle do - while con una función de búsqueda simple de la siguiente manera:
const jobs = [ {id: 1, location: 'AA'}, {id: 2, location: 'BB'}, {id: 3, location: 'CC'}, ] const filteredLocations = ['AA', 'CC'] const filteredJobs = jobs.filter(function(el, i) { return filteredLocations.find((filteredLocation) => filteredLocation === el.location); }) console.log(filteredJobs);