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"
],
},
]
];
5 Réponses :
Utilisez index, comme pass index au lieu de 0 .. i[index unity
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]
})
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);
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"
],
},
]
];
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));