Recuperé datos de una API y ahora trato de transformar los datos para enviar una solicitud POST. Quiero agrupar dos ID de usuario que coincidan y publicar sus ciudades comunes en una matriz en lugar de objetos separados.
Por ejemplo, los datos que recupero se ven así:
{ "events": [ { "city": "city-1", "user": "d1177368-2310-11e8-9e2a-9b860a0d9039" }, { "city": "city-2", "user": "d1177368-2310-11e8-9e2a-9b860a0d9039" } ]}Quiero que los datos de mi solicitud POST sean similares a esto:
{ "user": { "d1177368-2310-11e8-9e2a-9b860a0d9039": [ { "city": [ "city-1", "city-2" ] }]}}Hasta ahora, este es mi componente React para la solicitud:
import React, { useEffect, useState } from "react"; import axios from "../data/axios"; export default function Events({ fetchEvents }) { const [events, setEvents] = useState([]); useEffect(() => { async function fetchData() { const requests = await axios.get(fetchEvents); setEvents(requests.data.events); return requests; } fetchData(); }, [fetchEvents]); //here is my issue: function createSessions(user, city) { if (user === user) { } }Gracias
Itere sobre la matriz de events , reduciéndola a un objeto con una propiedad de objeto de user . El objeto de user tiene los valores de user de los elementos de la matriz de events como clave y las ciudades se insertan en una propiedad de matriz de city .
events.reduce( (result, el) => { if (!result.user[el.user]) { result.user[el.user] = [{ city: [] }]; } result.user[el.user][0].city.push(el.city); return result; }, { user: {} } ); const data = { events: [ { city: "city-1", user: "d1177368-2310-11e8-9e2a-9b860a0d9039" }, { city: "city-2", user: "d1177368-2310-11e8-9e2a-9b860a0d9039" } ] }; const data2 = data.events.reduce( (result, el) => { if (!result.user[el.user]) { result.user[el.user] = [{ city: [] }]; } result.user[el.user][0].city.push(el.city); return result; }, { user: {} } ); console.log(data2);