echart 须要数据结构[{name:"计划",data:[10,20,30]},{name:"实现",data:[8,21,31]}](折线图、柱状图)
数据结构
通常数据结构是[{name:"a客户",计划:10,实现:11},{name:"b客户",计划:20,实现:8}...]echarts
作一下js简单封装,[{name},{name}] to { name:["",""]}ide
//根据id,赋值 function setOptionById(eid,option){ var ec=echarts.getInstanceByDom($("#"+eid)[0]); ec.hideLoading(); ec.setOption(option); } //封装echarts [{name},{name}] to { name:["",""]},opt.x opt.y tname=title dname=data function etData (etitle,edata,eopt){ //判断类型 //var title= etTitle(title); /*console.info(etitle); console.info(edata); console.info(eopt);*/ if(!jQuery.isPlainObject(eopt)){ return; } //x轴数据,eopt.x = name var xdata=etXdata(edata,eopt.x); console.info(xdata); //series轴数据 var sdata=etSdata(edata,eopt.s); console.info(sdata); //图标 var legdata=eopt.tb||{}; var opt={ title:{ text:etitle, x:"center" }, tooltip: {}, legend:legdata, xAxis:{ data:xdata }, yAxis:{}, series:sdata }; return opt; } function etXdata(edata,xname){ //console.info(edata); //console.info(index); var xdata=[]; edata.forEach(function(e){ //console.info(e); xdata.push(Object.getOwnPropertyDescriptor(e,xname).value); }); return xdata; } function etSdata(edata,sopt){ var sdata=[]; sopt.forEach(function(sd){ var md={ name:sd.tname, type:sd.type, data:etXdata(edata,sd.dname) } sdata.push(md); }); return sdata; } //配置 var eoption={x:"name",s:[{tname:"计划",dname:"mp",type:"bar"},{tname:"兑现",dname:"ms_md",type:"bar"}],tb:{data:["计划","兑现"],x:"left"}}; //data var data=[{name:"A客户",yp:"200",mp:"20",ms_mp:"20",ms_md:"28",ys_yd:"208"},{name:"B客户",yp:"450",mp:"48",ms_mp:"48",ms_md:"58",ys_yd:"480"}]; var opt=etData("月进度统计(万吨)",data,eoption); //赋值 setOptionById("staCharts",opt);
关键代码code
function etXdata(edata,xname){ var xdata=[]; edata.forEach(function(e){ //console.info(e); xdata.push(Object.getOwnPropertyDescriptor(e,xname).value); }); return xdata; }
循环集合,根据关键字查找数据添加到集合中。目前问题多列显示会重复循环屡次 😂ip