Estoy tratando de modificar una matriz. Tengo el siguiente json.
[ { state: "NY", key: "A", value: "Alarm" }, { state: "CT", key: "A", value: "Alarm" }, { state: "NH", key: "A", value: "Alarm" }, { state: "CT", key: "B", value: "Audible and Etched" }, { state: "NH", key: "B", value: "Audible and Etched" }, { state: "NY", key: "AA", value: "Active Disabling and Anti-Theft" }, { state: "FL", key: "B", value: "Audible and Etched" }, { state: "FL", key: "A", value: "Alarm" }, { state: "FL", key: "AA", value: "Active Disabling and Anti-Theft" } ]Según cada estado único, necesito agrupar la clave, los valores en una matriz desplegable como se muestra a continuación
[{ state: "NY", dropdown: [ { key: "A", value: "Alarm" }, { key: "AA", value: "Active Disabling and Anti-Theft" } ] }, { state: "CT", dropdown: [ { key: "A", value: "Alarm" }, { key: "B", value: "Audible and Etched" } ] }, { state: "NH", dropdown: [ { key: "A", value: "Alarm" }, { key: "B", value: "Audible and Etched" } ] }, { state: "FL", dropdown: [ { key: "A", value: "Alarm" }, { key: "B", value: "Audible and Etched" }, { key: "AA", value: "Active Disabling and Anti-Theft" } ] }]Cualquier ayuda sería apreciada. Gracias.
Puede usar Array.reduce para obtener la matriz modificada.
const inputArray = [ { state: "NY", key: "A", value: "Alarm" }, { state: "CT", key: "A", value: "Alarm" }, { state: "NH", key: "A", value: "Alarm" }, { state: "CT", key: "B", value: "Audible and Etched" }, { state: "NH", key: "B", value: "Audible and Etched" }, { state: "NY", key: "AA", value: "Active Disabling and Anti-Theft" }, { state: "FL", key: "B", value: "Audible and Etched" }, { state: "FL", key: "A", value: "Alarm" }, { state: "FL", key: "AA", value: "Active Disabling and Anti-Theft" } ]; const result = inputArray.reduce((acc, item) => { const exist = acc.find(e => e.state == item.state); if (exist) { exist.dropdown.push({ key: item.key, value: item.value }) } else { acc.push({ state: item.state, dropdown: [{ key: item.key, value: item.value }] }); } return acc; }, []); console.log(result);