dr-vue-echarts
Version: 
A vue-echart library
82 lines (71 loc) • 1.66 kB
JavaScript
/* eslint-disable no-use-before-define */
/**
 * Get all labels of the data
 *
 * @param {array} param
 * @returns
 */
function getAllLabels(param) {
  const results = [];
  param.forEach((item) => {
    item.data && item.data.forEach((dataItem) => {
      dataItem && results.push(dataItem.label);
    });
  });
  return [...new Set(results)];
}
/**
 * Get all the values of name by traverse the origin data
 *
 * @param {*} name name of the data
 * @param {*} data the origin income data
 * @example
 * ```
 *getValuesOfName('data1', [{
    name: 'data1',
    data: [{value: 123, label: 'label1'}]
  }])
 * ```
 * @returns
 */
function getValuesOfName(name, data) {
  function getValueOfLabel(label, list) {
    const match = list.find(item => item.label === label);
    return match ? match.value : 0;
  }
  function getDataOfName(_name, _data) {
    const match = _data.find(i => i.name === _name);
    return match ? match.data : [];
  }
  const labels = getAllLabels(data);
  const dataOfName = getDataOfName(name, data);
  const result = [];
  labels.forEach((label) => {
    result.push(getValueOfLabel(label, dataOfName));
  });
  return result;
}
/**
 * bar / line chart formatter func
 *
 * @param {array} data
 * @param {string} chartType
 * @returns
 */
function linear(data, chartType) {
  const DEFAULT_CHART_TYPE = 'bar';
  const names = data.map(i => i.name);
  const labels = getAllLabels(data);
  const seriesData = names.map(name => ({
    type: chartType || DEFAULT_CHART_TYPE,
    name,
    label: labels,
    data: getValuesOfName(name, data),
  }));
  return {
    seriesData,
    names,
    labels,
  };
}
export default linear;