Tengo una lista llamada 'serie' que tiene todos los datos dentro. Estoy analizando en 'periodList' otra lista de cadenas y recorriendo esta lista periodList y usando .filter para filtrar el conjunto de datos principal (serie). Esto está volviendo correctamente. Ahora estoy tratando de agregar elementos al objeto myArray usando .map pero no me da el resultado esperado.

He intentado lo siguiente:

function chartBuilder(series, periodList) {

    var myArray = {}; //creates **a new empty object**

    for (var i in periodList) {


        var seriessplit = series.filter(function (type) {
            return type.pc === periodList[i];
        });



        myArray = seriessplit.map(elem => (
            {
                name: elem.pc,
                type: chartType,
                data: [elem.mid]
            }
        ));


        console.log(myArray);

    }
}

Esto actualmente me da una salida:

Array(7)
0: {name: "Oct 20", type: "Line", data: Array(1)}
1: {name: "Oct 20", type: "Line", data: Array(1)}
2: {name: "Oct 20", type: "Line", data: Array(1)}
3: {name: "Oct 20", type: "Line", data: Array(1)}
4: {name: "Oct 20", type: "Line", data: Array(1)}
5: {name: "Oct 20", type: "Line", data: Array(1)}
6: {name: "Oct 20", type: "Line", data: Array(1)}

Pero lo que esperaba es que los datos se combinen para tener el siguiente aspecto:

  {
        name: "Oct 20",
        type: "Line",
        data: [45,45,24,25,64,65,87]
    }

¿Dónde voy mal? Parece estar creando un nuevo elemento en el objeto para cada nuevo valor de datos

0
RA19 20 ene. 2021 a las 16:08

1 respuesta

La mejor respuesta

Desea mapear solo data, no toda la matriz / objeto:

const series = [
    {pc: "Oct 20", mid: 45},
    {pc: "Oct 20", mid: 45},
    {pc: "Oct 20", mid: 24},
    {pc: "Oct 20", mid: 25},
    {pc: "Oct 21", mid: 145},
    {pc: "Oct 21", mid: 145},
    {pc: "Oct 21", mid: 124},
    {pc: "Oct 21", mid: 125}
];
const chartType = "Line";

function chartBuilder(series, periodList) {
    for (let i in periodList) {
        const seriessplit = series.filter(({pc}) => pc === periodList[i]);

        const myArray = {
            name: periodList[i],
            type: chartType,
            data: seriessplit.map(({mid}) => mid)
        };

        console.log(myArray);
    }
}

chartBuilder(series, ["Oct 20", "Oct 21"]);

Si necesita una matriz de esto, puede mapear dos veces:

const series = [
    {pc: "Oct 20", mid: 45},
    {pc: "Oct 20", mid: 45},
    {pc: "Oct 20", mid: 24},
    {pc: "Oct 20", mid: 25},
    {pc: "Oct 21", mid: 145},
    {pc: "Oct 21", mid: 145},
    {pc: "Oct 21", mid: 124},
    {pc: "Oct 21", mid: 125}
];
const chartType = "Line";

function chartBuilder(series, periodList) {
    return periodList.map(period => {
        const seriessplit = series.filter(({pc}) => pc === period);

        const myArray = {
            name: period,
            type: chartType,
            data: seriessplit.map(({mid}) => mid)
        };

        console.log(myArray);
        return myArray;
    });
}

console.log(chartBuilder(series, ["Oct 20", "Oct 21"]));
1
Thomas Sablik 20 ene. 2021 a las 13:35