Mi matriz para el filtro:
types: [ { type: 0, name: 'Item_1' }, { type: 1, name: 'Item_2' }, { type: 2, name: 'Item_3' }, { type: 3, name: 'Item_4' }, { type: 4, name: 'Item_5' }, { type: 5, name: 'Item_6' }, { type: 6, name: 'Item_7' }, ]filtrado por:
sort: [1, 2, 3];¿Cómo puedo hacer algo como esto pero para múltiples valores?
filterType(item) { return item.type.toString() == this.sort; }ACTUALIZACIÓN: Necesidad de esta función:
filtered() { const conditions = []; if (this.sort) { conditions.push(this.filterType); } if (conditions.length > 0) { return this.types.filter((dessert) => { return conditions.every((condition) => { return condition(dessert); }) }) } return this.types; }Ya intenté hacer un bucle for y foreach pero no funciona
Prueba de esta manera:
const types = [ { type: 0, name: 'Item_1' }, { type: 1, name: 'Item_2' }, { type: 2, name: 'Item_3' }, { type: 3, name: 'Item_4' }, { type: 4, name: 'Item_5' }, { type: 5, name: 'Item_6' }, { type: 6, name: 'Item_7' }, ]; const needTypes = new Set([1, 2, 3]); const filterTypes = (arr) => arr.filter(item => needTypes.has(item.type)); console.log(filterTypes(types)); Utilicé el new Set() porque si los tipos de needTypes son una matriz muy grande, llevará mucho tiempo buscar en el elemento de la matriz cada vez.
Parece que estás usando una class . Así que pase la matriz de types y la matriz de sort , y luego llame al método de filter de la clase para devolver esos objetos filtrados.
Algo como esto.
class Desserts { constructor(types, sort) { this.types = types; this.sort = sort; } add(obj) { this.types.push(obj); } updateSort(n) { this.sort.push(n); } filter() { return this.types.filter(dessert => { return this.sort.includes(dessert.type); }); } } const types = [{type:0,name:'Item_1'},{type:1,name:'Item_2'},{type:2,name:'Item_3'},{type:3,name:'Item_4'},{type:4,name:'Item_5'},{type:5,name:'Item_6'},{type:6,name:'Item_7'}]; const sort = [1, 2, 3]; const desserts = new Desserts(types, sort); console.log(desserts.filter()); desserts.add({ type:7, name:'Item_8' }); desserts.updateSort(7); console.log(desserts.filter());