Tengo un diccionario llamado teamData
var teamData = { app: { sortCol:"name", sortDir:"asc" }, data: [ { id: 1, name:"Raptors", coachId: 1, coachFirst: "Ken", coachLast: "jenson", coachPhone: "801-333-4444", coachEmail: "ken.jenson@uvu.edu", coachLicenseLevel: 1, league: 1, division: 1 }, { id: 2, name:"Killer Bunnies", coachId: 2, coachFirst: "Peter", coachLast: "Rabbit", coachPhone: "801-333-4444", coachEmail: "peter.rabbit@uvu.edu", coachLicenseLevel: 1, league: 1, division: 2 }, { id: 3, name:"Thunderbirds", coachId: 3, coachFirst: "Harry", coachLast: "DirtyDog", coachPhone: "801-333-4444", coachEmail: "harry.dirty.dog@uvu.edu", coachLicenseLevel: 2, league: 1, division: 2 } ] }
Estoy tratando de escribir una función que tome un objeto clave/valor y devuelva un diccionario filtrado. Entonces si la función es
let teams = filter({coachLicenseLevel:1});
entonces el resultado esperado es devolver un diccionario filtrado con solo dos elementos que tienen ese par clave/valor
Aquí está la función que tengo hasta ahora, pero no sé cómo obtener el objeto clave.
filter(filterObj) { const v = Object.values(filterObj); const k = Object.keys(filterObj); const res = teamData.filter(({???}) => v.includes(???)); }
Cualquier ayuda sería apreciada.
Si desea filtrar solo la matriz de datos, podría hacer algo como esto:
function filterArrayByParamAndValue(arr, itemParam, value) { return arr.filter(item => item.itemParam === value) }
Y en su código simplemente reemplace la propiedad data
, si
let teamData = { ...., data: [...filterArrayByParamAndValue(teamData.data, coachLicenseLevel, 1)], .... }
Por supuesto, también debe agregar todas las comprobaciones necesarias en la función de filtro, o incluso agregar una propiedad de objeto para verificar y pasar todo el objeto.
En lugar de pasar un objeto, puede considerar usar la función de filtro con su lógica de filtro personalizada. Aquí hay un ejemplo para su caso específico:
let teams = teamData.data.filter(item => item.coachLicenseLevel == 1)