En este momento tengo una serie de objetos
array = [ { text: 'Example 1', colorCode: '1' }, { text: 'Example 2', colorCode: '2' }, { text: 'Example 3', colorCode: '3' }, text: 'Example 4', colorCode: '3' } ]entonces tengo una serie de filtros
filters = [1, 3]Estoy intentando escribir una función que devuelva una matriz basada en los filtros proporcionados, por lo que este ejemplo devolvería una matriz de objetos que contienen el ejemplo 1, el ejemplo 2 y el ejemplo 4.
Actualmente estoy creando una matriz y recorriendo los filtros uno a la vez. Algo como esto
let filteredArray = []; filters.forEach((x: number) => { filteredArray = filteredArray.concat(_.filter(this.array, {colorCode: x})) })Sin embargo, esto parece redundante ya que tengo que recorrer la matriz para cada filtro, y llevará más tiempo a medida que crezca la matriz. Recorro la matriz y encuentro todos los códigos de color === 1, luego recorro la matriz y encuentro todos los códigos de color === 3. ¿Hay alguna manera de recorrer la matriz solo una vez y verificar si cada objeto.colorCode = == 1 || objeto.colorCode === 3.
Mi problema con esta función es que la matriz de filtros cambia constantemente en valores y tamaño, por lo que la función debe tener en cuenta eso en lugar de pasar valores estáticos.
Puede usar el filter para eliminar los elementos cuya propiedad colorCode no está incluida en la matriz de filters .
let array=[{text:"Example 1",colorCode:"1"},{text:"Example 2",colorCode:"2"},{text:"Example 3",colorCode:"3"},{text:"Example 4",colorCode:"3"}]; const filters = [1, 3] let result = array.filter(e => filters.includes(+e.colorCode)) console.log(result)Puede comenzar con los valores de colorCode , filtrar por cada valor y luego aplanar la matriz resultante.
const array=[{text:"Example 1",colorCode:"1"},{text:"Example 2",colorCode:"2"},{text:"Example 3",colorCode:"3"},{text:"Example 4",colorCode:"3"}]; const filters = [1, 3] const result = [].concat( ...filters.map(f => array.filter(({colorCode:c}) => +c === f)) ); console.log( result );