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

 更新时间:2013年08月01日 16:15:03   作者:  
为了实现这样的数据显示出来三个序列,分别为郑州、新乡、安阳的电量,就需要自己实现对这样数据的转换,转换成如下的形式:

月份 郑州-电量 新乡-电量 安阳-电量
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']);
}
})


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

相关文章

  • js播放wav文件(源码)

    js播放wav文件(源码)

    如何用JS播放wav文件,理论上用js在网页里嵌入一个window播放器的插件,可以播放的。,不过通用性不是很好,IE下可以用,感兴趣的朋友可以参考下哈本文
    2013-04-04
  • JS鼠标滑过图片时切换图片实现思路

    JS鼠标滑过图片时切换图片实现思路

    在浏览网页时会看到这样的效果:当鼠标滑过一张图片后,这张图片切换为了另外的一张图片,下面为大家介绍下具体是如何实现的,感兴趣的朋友不要错过
    2013-09-09
  • 5分钟快速掌握JS中var、let和const的异同

    5分钟快速掌握JS中var、let和const的异同

    在javascript中有三种声明变量的方式:var、let、const,这个是对新手们来说应该掌握的知识,所以这篇文章主要给大家介绍了关于如何通过5分钟快速掌握JS中var,let和const的异同,需要的朋友可以参考下
    2018-09-09
  • webpack-dev-server搭建本地服务器的实现

    webpack-dev-server搭建本地服务器的实现

    当我们使用webpack打包时,发现每次更新了一点代码,都需要重新打包,我们希望本地能搭建一个服务器,本文就介绍如何使用webpack-dev-server搭建本地服务器,感兴趣的可以了解一下
    2021-07-07
  • javascript实现淘宝幻灯片广告展示效果

    javascript实现淘宝幻灯片广告展示效果

    这篇文章主要介绍了javascript实现淘宝幻灯片广告展示效果的方法,以实例形式完整讲述了javascript实现幻灯效果的javascript、css及html实现技巧,需要的朋友可以参考下
    2015-04-04
  • javascript中$(function() {});写与不写有哪些区别

    javascript中$(function() {});写与不写有哪些区别

    javascript中$(function() {....}) 是jQuery中的经典用法,等同于 $(document).ready(function() {....}) javascript中$(function() {});写与不写有哪些区别,需要的朋友可以参考下
    2015-08-08
  • ES6 class的应用实例分析

    ES6 class的应用实例分析

    这篇文章主要介绍了ES6 class的应用,结合实例形式分析了class在ES6面向对象程序设计中定义类的相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • javascript超过容器后显示省略号效果的方法(兼容一行或者多行)

    javascript超过容器后显示省略号效果的方法(兼容一行或者多行)

    下面小编就为大家带来一篇javascript超过容器后显示省略号效果的方法(兼容一行或者多行)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • JS操作图片(增,删,改) 例子

    JS操作图片(增,删,改) 例子

    JS操作图片(增,删,改) 例子,需要的朋友可以参考一下
    2013-04-04
  • 微信公众平台 客服接口发消息的实现代码(Java接口开发)

    微信公众平台 客服接口发消息的实现代码(Java接口开发)

    这篇文章主要介绍了微信公众平台 客服接口发消息的实现代码(Java接口开发),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04

最新评论