1
votes

Je veux des données au format suivant

Je travaille avec une API et j'ai réussi à formater les données dans cet ordre:
Les données sont dans ce format

[
    {
        series: {
            data: [[3,4]]
        }
    },
    {
        series: {
            data: [[3,4],[9,10]]
        }
    },
]

À partir des données ci-dessus, je souhaite extraire les propriétés des points dans cet ordre.
La sortie est requise comme suit:

const required = data.map((_, index) => {
  return {
    series: {
      data: data.slice(0, index + 1).map(i => [i[0].point[0], i[0].point[1]])
    }
  }
})

Au fur et à mesure que je travaillais, j'ai appris que j'avais besoin d'aide . Comme je suis débutant dans ce domaine, j'aimerais demander de l'aide.

J'ai essayé de faire:

[
    {
        series: {
            data: [[3,4],[5,6],[7,8]]
        }
    },
    {
        series: {
            data: [[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16]]
        }
    },
]

Je suis en mesure de commencer élément de chaque tableau. Je ne pouvais pas comprendre d'inclure tous les éléments. C’est parce que j’ai utilisé Je ne peux pas boucler en raison du manque d'expérience.
Résultat que j'ai obtenu:

const data = [
    [
        {
            "point":
            [
                "3",
                "4"
            ],
        },
        {
            "point":
            [
                "5",
                "6"
            ],
        },
        {
            "point":
            [
                "7",
                "8"
            ],
        },
    ],
    [
        {
            "point":
            [
                "9",
                "10"
            ],
        },
        {
            "point":
            [
                "11",
                "12"
            ],
        },
        {
            "point":
            [
                "13",
                "14"
            ],
        },
        {
            "point":
            [
                "15",
                "16"
            ],
        },
    ]
];


0 commentaires

5 Réponses :


0
votes

Utilisez index, comme pass index au lieu de 0 .. i[index unity


0 commentaires

0
votes
let required = data.map(series => ({
    'series': {
        'data': series.map(i => [parseInt(i.point[0]), parseInt(i.point[1])]) // parseInt to convert the strings into numbers
    }
}))

// we use this to add [[3, 4], ...] to the second series [[9, 10], ...].
// To be exactly: it makes that every series includes the previous ones.
required.forEach((_, index) => {
    if (index == 0) return 
    
    required[index].series.data = [...required[index - 1].series.data, ...required[index].series.data]
})

0 commentaires

0
votes

Je suppose que vous avez besoin d'une carte ici:

var data = [ [ { "point": [ "3", "4" ], }, { "point": [ "5", "6" ], }, { "point": [ "7", "8" ], }, ], [ { "point": [ "9", "10" ], }, { "point": [ "11", "12" ], }, { "point": [ "13", "14" ], }, { "point": [ "15", "16" ], }]];

var result = data.map(k=>k.map(l=>l.point.map(Number))).map((k, i, self)=>[...(self[i-1]??[]), ...k]).map(k=>({series:{data:k}}));

console.log(result);


0 commentaires

1
votes

D'autres réponses présentées ici semblent présenter le tableau de séries comme l'une des chaînes. La sortie requise les affiche clairement sous forme de nombres, et non de chaînes qui les représenteraient. Le code suivant effectue la conversion.

"use strict";
window.addEventListener('load', onLoaded, false)

function onLoaded(evt) {
  var result = data.map(func);
  console.log(result);

  function func(el, index, collection) {
    let tmpResult = {
      series: {
        data: []
      }
    };
    el.forEach(pointFunc);

    function pointFunc(pointObj) {
      tmpResult.series.data.push(pointObj.point.map(el => parseFloat(el)));
    }
    return tmpResult;
  }
}

const data = [
  [{
      "point": [
        "3",
        "4"
      ],
    },
    {
      "point": [
        "5",
        "6"
      ],
    },
    {
      "point": [
        "7",
        "8"
      ],
    },
  ],
  [{
      "point": [
        "9",
        "10"
      ],
    },
    {
      "point": [
        "11",
        "12"
      ],
    },
    {
      "point": [
        "13",
        "14"
      ],
    },
    {
      "point": [
        "15",
        "16"
      ],
    },
  ]
];


0 commentaires

0
votes

Utiliser map , flatMap et Object.values ​​ simplifiera les données.

const convert = (data) =>
  data.map((arr) => ({ series: { data: arr.flatMap(Object.values) } }));

const data = [
    [
        {
            "point":
            [
                "3",
                "4"
            ],
        },
        {
            "point":
            [
                "5",
                "6"
            ],
        },
        {
            "point":
            [
                "7",
                "8"
            ],
        },
    ],
    [
        {
            "point":
            [
                "9",
                "10"
            ],
        },
        {
            "point":
            [
                "11",
                "12"
            ],
        },
        {
            "point":
            [
                "13",
                "14"
            ],
        },
        {
            "point":
            [
                "15",
                "16"
            ],
        },
    ]
];

console.log(convert(data));


0 commentaires