Преобразование и сортировка данных для представления диапазона столбцов HighChart - PullRequest
1 голос
/ 12 апреля 2019

У меня есть некоторые данные, поступающие в случайном порядке, и я хотел бы преобразовать их в определенный порядок для диапазонов столбцов Highchart.Любое понимание того, как сделать это эффективно, и понимание помогло бы

Кроме того, независимо от порядка ввода данных, я всегда хочу отображать диаграммы в порядке Apple Orange Banana с их правильным представлением

Я пробовал использовать карты,наборы, массив в рубине и есть что-то работающее, что является очень хрупким и не самым эффективным.

            headers = Array.wrap(raw_data.dig('data', 'dimensions', 'axes', 'headers'))
            values  = Array.wrap(raw_data.dig('data', 'values', 'c')).map(&:to_f)
            labels  = headers.map { |header| Array.wrap(header['label']) }
            data = values.each_slice(2)

Это вес фруктов LOW - это наименьший вес, а HIGH - наивысший вес.Проблема в том, что порядок данных упорядочен по весу, поэтому я не могу просто нарезать последовательные значения массива.

JSON DATA

{
  "data": {
    "dimensions": {
      "axes": {
        "headers": [{
          "label": ["Apple", "Low"]
        }, {
          "label": ["Apple", "High"]
        }, {
          "label": ["Orange", "Low"]
        }, {
          "label": ["Banana", "Low"]
        }, {
          "label": ["Orange", "High"]
        }, {
          "label": ["Banana", "High"]
        }]
      }
    }
    "values": {
      "c": ["173", "273", "414", "608", "610", "1050"]
    }
}

ОЖИДАЕМЫЙ ВЫХОД

{
        series: [
          {'name': 'Weight', 'data': [[173, 273], [414, 610], [608, 1050]]}
        ],
        axis_labels: ['Apple', 'Orange', 'Banana'],
 }

chart https://jsfiddle.net/Praveen2710/7sdqz6Le/8/

1 Ответ

1 голос
/ 15 апреля 2019

Вам необходимо предварительно обработать данные в формате, требуемом Highcharts:

var json = {...}

var series = {
        name: 'Weight',
        data: []
    },
    i,
    header1,
    header2,
    value,
    indexOf,
    point,
    categories = [];

for (i = 0; i < json.data.values.c.length; i++) {
    labels = json.data.dimensions.axes.headers[i].label;
    header1 = labels[0].toLowerCase(),
        header2 = labels[1].toLowerCase(),
        value = json.data.values.c[i];
    indexOf = categories.indexOf(header1);

    if (indexOf !== -1) {
        series.data[indexOf][header2] = Number(value);
    } else {
        categories.push(header1);

        series.data.push({
            [header2]: Number(value),
            x: series.data.length
        });
    }
}

Highcharts.chart('container', {
    ...,
    series: [series]
});

Демонстрационная версия: http://jsfiddle.net/BlackLabel/nm976qho/

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