Tengo los datos en un archivo en 5 columnas: ubicación, identificación del artículo, número de inventario, número de contenedor, cantidad.
Data de muestra-
>[ { "Item ID": 12, "Location": "DEL", "Inventory Number": 18, "Bin Number": 3, "Quantity": 250 }, { "Item ID": 22, "Location": "DEL", "Inventory Number": 30, "Bin Number": 3, "Quantity": 50 }, { "Item ID": 12, "Location": "DEL", "Inventory Number": 19, "Bin Number": 3, "Quantity": 250 }, { "Item ID": 22, "Location": "DEL", "Inventory Number": 31, "Bin Number": 3, "Quantity": 50 } ]Quiero agrupar los datos para que todos los elementos de una ubicación se agrupen al principio, luego todos los elementos se agrupen para la ubicación y, por último, se agrupe el número de inventario para elementos únicos.
>{ "DEL": [ { "itemId": "12", "quantity": "500", "bins": [ { "inventorynumber": "18", "binnumber": "3", "quantity": "250" }, { "inventorynumber": "19", "binnumber": "3", "quantity": "250" } ] }, { "itemId": "22", "quantity": "100", "bins": [ { "inventorynumber": "30", "binnumber": "3", "quantity": "50" }, { "inventorynumber": "31", "binnumber": "3", "quantity": "50" } ] } ] } Quiero hacerlo en JavaScript puro, puedo agruparlos por separado.
¿Alguien puede ayudarme a obtener el resultado en el formato deseado?
Podrías encontrar el grupo interno.
const data = [{ "Item ID": 12, Location: "DEL", "Inventory Number": 18, "Bin Number": 3, Quantity: 250 }, { "Item ID": 22, Location: "DEL", "Inventory Number": 30, "Bin Number": 3, Quantity: 50 }, { "Item ID": 12, Location: "DEL", "Inventory Number": 19, "Bin Number": 3, Quantity: 250 }, { "Item ID": 22, Location: "DEL", "Inventory Number": 31, "Bin Number": 3, Quantity: 50 }], result = data.reduce((r, { "Item ID": itemId, Location: location, "Inventory Number": inventorynumber, "Bin Number": binnumber, Quantity: quantity }) => { const temp = (r[location] ??= []).find(q => q.itemId === itemId); if (temp) { temp.quantity += quantity; temp.bins.push({ inventorynumber, binnumber, quantity }); } else { r[location].push({ itemId, quantity, bins: [{ inventorynumber, binnumber, quantity }] }); } return r; }, {}); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }