Estoy usando .map() para recorrer un objeto y colocar algunos valores en un segundo objeto.
Estoy haciendo esto como tal:
function convertGraphItems(name, data) { return ({ name, data, type: 'bar', stack: true }); } var generatedArr = [...dataByAccountName.entries()].map(convertGraphItems);Sin embargo, parece que no puedo asignar 'nombre' y 'datos' a sus respectivas claves.
He intentado return ({ name: name, data: data, type: 'bar', stack: true }); pero esto no logra lo que quiero.
Mi resultado deseado debería verse así:
[ { "name": "Savings", "data": [ 5474.18, 114031.26, 127890.72 ], "type": "bar", "stack": true } ]Pero mi resultado actual es:
[ { "name": [ "Savings", [ 5474.18, 114031.26, 127890.72 ] ], "data": 0, "type": "bar", "stack": true } ] ¿Alguien sabría cómo podría asignar data y name a sus respectivas claves?
EDITAR: la matriz de origen se parece a:
[ { "key": "Savings", "value": [ 5474.18, 114031.26, 127890.72 ] }, ]Los primeros dos argumentos pasados a la devolución de llamada Array.prototype.map() son
element
El elemento actual que se procesa en la matriz.
index
El índice del elemento actual que se está procesando en la matriz.
Parece poco probable que desee que data sean el índice.
const dataByAccountName = [{"key":"Savings","value":[5474.18,114031.26,127890.72]}] const generatedArr = dataByAccountName.map(({ key: name, value: data }) => ({ name, data, type: "bar", stack: true })) console.log(generatedArr) .as-console-wrapper { max-height: 100% !important; }Si está utilizando otra cosa que produce entradas (como un mapa), así es como lo mapearía
const dataByAccountName = new Map() dataByAccountName.set("Savings", [ 5474.18, 114031.26, 127890.72 ]) const generatedArr = Array.from(dataByAccountName, ([ name, data ]) => ({ name, data, type: "bar", stack: true })) console.log(generatedArr) .as-console-wrapper { max-height: 100% !important; } He usado Array.from() desde que en mi opinión se ve mejor que [...map.entries()].map() y logra exactamente lo mismo.
Tenga en cuenta que el primer (y único) argumento pasado a la devolución de llamada de asignación es una matriz desestructurada en lugar de dos argumentos separados.
Está pasando la función convertGraphItems al map y espera el name como key y los data como value , pero este no es el caso aquí.
En el map el primer argumento es el valor y el segundo es el index . Debe hacer que convertGraphItems sea compatible para que pueda pasar el valor externamente como:
[...dataByAccountName.entries()].map(function ([_, { key, value }]) { return convertGraphItems(key, value); }); const dataByAccountName = [ { key: "Savings", value: [5474.18, 114031.26, 127890.72], }, ]; function convertGraphItems(name, data) { return { name, data, type: "bar", stack: true }; } var generatedArr = [...dataByAccountName.entries()].map(function ([, v]) { const { key, value } = v; return convertGraphItems(key, value); }); console.log(generatedArr);Si ya tiene la matriz de origen disponible como la incluyó en la pregunta, no necesita una función separada para ella.
const sources = [{ "key": "Savings", "value": [5474.18, 114031.26, 127890.72] }] const parsedData = sources.map(({key, value}) => ({ name: key, data: value, type: 'bar', stack: true })); console.log(parsedData)