读书人

js兑现json数据行到列的转换

发布时间: 2013-01-05 15:20:39 作者: rapoo

js实现json数据行到列的转换

前面实现了Ext动态生成图表的功能,满足了基本的要求。后面用户提出这样的问题:有如下的数据:

月份 电量 单位

201201 33 郑州

201202 35 郑州

201203 34 郑州

201204 36 郑州

201205 34.3 郑州

201201 29 新乡

201202 26 新乡

201203 27 新乡

201204 28 新乡

201205 28.8 新乡

201201 23 安阳

201202 25 安阳

201203 24 安阳

201204 26 安阳

201205 24.3 安阳

预期能够显示郑州、安阳、新乡三个序列,但Ext图表本身不支持把这样的数据显示成三个图表序列:如果X轴选月份,y轴选电量,就会显示成三遍201201—201205的数据,而显示不出来郑州、新乡和安阳的标识。

为了实现这样的数据显示出来三个序列,分别为郑州、新乡、安阳的电量,就需要自己实现对这样数据的转换,转换成如下的形式:

月份 郑州-电量 新乡-电量 安阳-电量

201201 33 29 23

201202 35 26 25

201203 34 27 24

201204 36 28 26

201205 34.3 28.8 24.3

这样,Ext的图表就能把它显示成三个序列了。

我写了如下的函数实现这个功能:

TestCase("Test json data row to column",{    setUp:function(){        this.jsonData = [{yearmonth:201201,ppq:23,spq:27,company:'dfsoft'},            {yearmonth:201202,ppq:33,spq:38,company:'dfsoft'},            {yearmonth:201203,ppq:43,spq:49,company:'dfsoft'},            {yearmonth:201204,ppq:53,spq:51,company:'dfsoft'},            {yearmonth:201201,ppq:29,spq:26,company:'vcom'},            {yearmonth:201202,ppq:34,spq:38,company:'vcom'},            {yearmonth:201203,ppq:48,spq:43,company:'vcom'},            {yearmonth:201204,ppq:52,spq:59,company:'vcom'}];        var fromField = 'ppq,spq', toField = 'company', idField = 'yearmonth';        this.resultData = CovertData(this.jsonData,idField,fromField, toField);    },    "test store has columns":function(){        var month1 = this.resultData[findIdx(this.resultData,'yearmonth',201201)];        var month2 = this.resultData[findIdx(this.resultData,'yearmonth',201202)];        var month3 = this.resultData[findIdx(this.resultData,'yearmonth',201203)];        var month4 = this.resultData[findIdx(this.resultData,'yearmonth',201204)];        assertEquals(4,this.resultData.length);        assertEquals('23',month1['dfsoft-ppq']);        assertEquals('29',month1['vcom-ppq']);        assertEquals('33',month2['dfsoft-ppq']);        assertEquals('34',month2['vcom-ppq']);        assertEquals('43',month3['dfsoft-ppq']);        assertEquals('48',month3['vcom-ppq']);        assertEquals('53',month4['dfsoft-ppq']);        assertEquals('52',month4['vcom-ppq']);        assertEquals('27',month1['dfsoft-spq']);        assertEquals('26',month1['vcom-spq']);        assertEquals('38',month2['dfsoft-spq']);        assertEquals('38',month2['vcom-spq']);        assertEquals('49',month3['dfsoft-spq']);        assertEquals('43',month3['vcom-spq']);        assertEquals('51',month4['dfsoft-spq']);        assertEquals('59',month4['vcom-spq']);    }})

测试通过,表示转换成功。




读书人网 >JavaScript

热点推荐