js实现json数据行到列的转换的实例代码
js实现json数据行到列的转换的实例代码
发布时间:2016-12-30 来源:查字典编辑
摘要:月份郑州-电量新乡-电量安阳-电量20120133292320120235262520120334272420120436282620120...

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

201201 33 29 23

201202 35 26 25

201203 34 27 24

201204 36 28 26

201205 34.3 28.8 24.3

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

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

复制代码 代码如下:

function CovertData(jsonData,idField, fromField, toField){

var result = [], curRecord =null, num;

var fromFields = fromField.split(',');

// 循环整个数组:[{...},{...},{...},...]

for(var idx=0;idx<jsonData.length;idx++){

num = findIdx(result, idField, jsonData[idx][idField]);

if(num!=-1){

curRecord = result[num];

}

else{

curRecord = {};

};

// 循环每个json对象中的字段

for(var key in jsonData[idx]){

// 处理转换的数据内容

for(var i=0;i<fromFields.length;i++){

if(key == fromFields[i]){

curRecord[jsonData[idx][toField]+'-' + fromFields[i]] = jsonData[idx][key];

break;

}

}

// 除数据内容外,只处理标识字段数据

if(key == idField){

curRecord[key] = jsonData[idx][key];

}

}

if(num==-1){

result.push(curRecord);

}

}

return result;

}

function findIdx(jsonData, columnName, value){

for(var idx = 0;idx<jsonData.length;idx++){

if(jsonData[idx][columnName]==value)

return idx;

}

return -1;

}

JsTestDriver的测试代码如下:

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教程学习
热门Javascript教程学习
编程开发子分类