Necesito terminar una función que comienza:
function organizeItems(items) {Necesito terminar eso para organizar una lista de categorías. mis categorías son frutas, lácteos y enlatados. Mi código se ve así:
[ { category: 'fruit', itemName: 'oranges', onSale: false }, { category: 'dairy', itemName: 'milk($)', onSale: true }, { category: 'canned', itemName: 'peas', onSale: false }, { category: 'canned', itemName: 'green beans($)', onSale: true }, { category: 'fruit', itemName: 'grapes($)', onSale: true }, { category: 'canned', itemName: 'carrots', onSale: false }, ];Entonces, ¿cómo funciono esto para devolver una lista como:
{ fruit: ['apple', 'melon($)'], canned: ['beans', 'corn($)', 'soup'], frozen: ['pizza'] };Haría esto a través de la función de reduce :
const items=[{category:'fruit',itemName:'oranges',onSale:false},{category:'dairy',itemName:'milk($)',onSale:true},{category:'canned',itemName:'peas',onSale:false},{category:'canned',itemName:'green beans($)',onSale:true},{category:'fruit',itemName:'grapes($)',onSale:true},{category:'canned',itemName:'carrots',onSale:false},]; const categorised = items.reduce((a, { category, itemName }) => { a[category] = a[category] || []; a[category].push(itemName); return a; }, {}); console.log(categorised); .as-console-wrapper { max-height: 100% !important; top: auto; }Esto funciona obteniendo el nombre de la categoría y el nombre del elemento de cada elemento en la matriz inicial y luego inicializando cada nombre de categoría para que sea una matriz vacía dentro del objeto acumulador. Luego inserte el nombre del elemento en la matriz de categoría correspondiente (ya sea preexistente o vacía), ¡y listo!