Мне нужны данные в следующем формате - PullRequest
1 голос
/ 20 июня 2020

Я работаю с некоторым API, и мне удалось отформатировать данные в следующем порядке: Данные в этом формате

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

Из приведенных выше данных я хочу извлечь свойства точек в этом порядке. Требуется вывод:

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

Когда я приступил к работе, я узнал, что мне нужна помощь. Поскольку я новичок в этой области, я хотел бы попросить о помощи.

Я пробовал делать:

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

Я могу получить первый элемент каждого массива. Я не мог понять, включить ли все элементы. Это потому, что я использовал i [0] . Я не могу l oop из-за отсутствия опыта. На выходе я получил:

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

Ответы [ 5 ]

1 голос
/ 20 июня 2020

Другие ответы, представленные здесь, по-видимому, представляют массив серий как одну из строк. Ваш требуемый результат ясно показывает их как числа, а не как строки, которые их представляют. Следующий код выполняет преобразование.

"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 голосов
/ 20 июня 2020

Использование map, flatMap и Object.values упростит.

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 голосов
/ 20 июня 2020
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 голосов
/ 20 июня 2020

Полагаю, вам нужно map здесь:

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 голосов
/ 20 июня 2020

Используйте индекс, например индекс передачи, вместо 0 .. i[index]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...