Tengo problemas para filtrar una matriz de objetos en función de una propiedad determinada.
La matriz de objetos se parece a esto:
someData: [{ id: "123", personData: [ { personName: "John Smith", personId: "125443", categoryId: "B1", description: "description" }}]}];Quiero agrupar los datos de persona en función de la identificación de categoría, pero representar la agrupación de categorías por su nombre de categoría (en lugar de la identificación, ya que esto no tendrá mucho sentido para el usuario).
Hay una serie de categorías que están contenidas en un json con el siguiente formato:
const groups = { data: [ { categoryName: "Banking", categoryId: "B1", description: "Financial sector" }, { categoryName: "Retail", categoryId: "R1", description: "Retail and customer experience" } ] };¿Cómo haría para filtrar en función de estas condiciones? ¡Toda ayuda es muy apreciada! estoy usando react y mecanografiado
Una vez filtrados, los datos deberían verse así:
Banking personName: John Smith personId: 125443 Retail personName: Judie Smith personId: 124938Creo que algo similar a esta función devolvería lo que necesita.
const data = [ { categoryName: "Banking", categoryId: "B1", description: "Financial sector" }, { categoryName: "Retail", categoryId: "R1", description: "Retail and customer experience" } ]; function groupByProperty(arrayOfObjects, property) { return arrayOfObjects.reduce((acc, curr) => { const key = curr[property]; if (!acc[key]) { acc[key] = []; } acc[key].push(curr); return acc; }, {}); } const dataByCategoryName = groupByProperty(data, "categoryName"); console.log(dataByCategoryName); /* Output { Banking: [{ categoryId: "B1", categoryName: "Banking", description: "Financial sector" }], Retail: [{ categoryId: "R1", categoryName: "Retail", description: "Retail and customer experience" }] } */Puede probar groupBy con los datos de esa persona.
const products = [ { name: 'apples', category: 'fruits' }, { name: 'oranges', category: 'fruits' }, { name: 'potatoes', category: 'vegetables' } ]; const groupByCategory = products.groupBy(product => { return product.category; }); console.log(groupByCategory); // { // 'fruits': [ // { name: 'apples', category: 'fruits' }, // { name: 'oranges', category: 'fruits' }, // ], // 'vegetables': [ // { name: 'potatoes', category: 'vegetables' } // ] // }