Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为HighChart列范围表示转换和排序数据_Ruby On Rails_Json_Highcharts - Fatal编程技术网

Ruby on rails 为HighChart列范围表示转换和排序数据

Ruby on rails 为HighChart列范围表示转换和排序数据,ruby-on-rails,json,highcharts,Ruby On Rails,Json,Highcharts,我有一些随机顺序的数据,希望转换为Highchart列范围的特定顺序。任何关于有效执行此操作的见解和见解都会有所帮助 另外,无论输入数据的顺序如何,我总是希望以苹果橙香蕉的顺序显示图表,并正确表示 我曾尝试在ruby中使用maps、Set和array,但有些东西非常脆弱,而且不是最有效的 headers = Array.wrap(raw_data.dig('data', 'dimensions', 'axes', 'headers')) value

我有一些随机顺序的数据,希望转换为Highchart列范围的特定顺序。任何关于有效执行此操作的见解和见解都会有所帮助

另外,无论输入数据的顺序如何,我总是希望以苹果橙香蕉的顺序显示图表,并正确表示

我曾尝试在ruby中使用maps、Set和array,但有些东西非常脆弱,而且不是最有效的

            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)
这是水果的重量,低的是最低重量,高的是最高重量。问题是数据的顺序是按权重排序的,所以我不能只对数组的连续值进行切片

JSON数据

{
  "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'],
 }
图表

您需要将数据预处理为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]
});
var json={…}
变量系列={
名称:'重量',
数据:[]
},
我
校长1,
校长2,
价值
indexOf,
指向
类别=[];
对于(i=0;i
现场演示: