Tengo que escribir una función, organicItems, que organice los elementos por categoría. El argumento de la función es una matriz de objetos de elementos. Cada objeto de elemento tiene 3 propiedades, categoría (cadena), itemName (cadena) y onSale (booleano).
var itemData = [ { category: 'fruit', itemName: 'apple', onSale: false }, { category: 'canned', itemName: 'beans', onSale: false }, { category: 'canned', itemName: 'corn', onSale: true }, { category: 'frozen', itemName: 'pizza', onSale: false }, { category: 'fruit', itemName: 'melon', onSale: true }, { category: 'canned', itemName: 'soup', onSale: false }, ];El valor devuelto debe ser un objeto con propiedades de categoría. Cada valor de propiedad es una matriz de artículos que pertenecen a esa categoría y tener onSale establecido en verdadero debe tener '($)' agregado al nombre de su artículo. Este es un ejemplo de lo que estoy tratando de hacer:
{ fruit: ['apple', 'melon($)'], canned: ['beans', 'corn($)', 'soup'], frozen: ['pizza'] };Hasta ahora esto es lo que tengo:
var codeObj = {}; for(var i = 0; i < itemData.length; i++){ for(key in itemData[i]){ codeObj[itemData[i].category] = Object.values([itemData[i].itemNames])Esto es lo que se envió a la consola:
{ fruit: [ undefined ], canned: [ undefined ], frozen: [ undefined ] }hola yo lo hice asi.
const obj = {}; itemData.map((item, index) => { let objKeys = Object.keys(item); objKeys.forEach((k) => { if (k === "category") { if (!obj[item[k]]) { obj[item[k]] = []; } if (!obj[item[k]].find((i) => i === item.itemName)) { obj[item[k]].push( item.onSale ? `${item.itemName}($)` : item.itemName ); } } }); }); console.log("obj", obj);mi manera
const itemData = [ { category: 'fruit', itemName: 'apple', onSale: false } , { category: 'canned', itemName: 'beans', onSale: false } , { category: 'canned', itemName: 'corn', onSale: true } , { category: 'frozen', itemName: 'pizza', onSale: false } , { category: 'fruit', itemName: 'melon', onSale: true } , { category: 'canned', itemName: 'soup', onSale: false } ] const result = itemData.reduce((r,{category,itemName,onSale})=> { r[category] = r[category] || [] r[category].push( itemName + (onSale?'($)':'')) return r },{}) // show result console.log( JSON.stringify(result) .replace(`{"`,`\nresult =\n { `) .replace(/"],"/g,`' ]\n , `) .replace(`"]}`,`' ]\n }`) .replace(/":\["/g,`: [ '`) .replace(/","/g,`', '`)) .as-console-wrapper {max-height: 100%!important;top:0 }Esta solución funciona
function organizeItems(itemData) { let obj = {} for(i=0; i<itemData.length; i++) { let item = itemData[i] for(key in item) { if(key === 'category') { if(!obj[item[key]]) { obj[item[key]] = [] } if(obj[item[key]]) { obj[item[key]].push(item.onSale ? `${item.itemName}($)` : `${item.itemName}`) } } } } return obj }