背景先说说为什么要做行转列。时间类别费用2014-07-08电费1202014-07-08水费232014-07-09电费442014-07-09水费772014-07-10电费452014-07-10水费212014-07-11Electricitybill342014-07-11Waterbill27费了九牛二虎之力,才发现每天的水电费只是测试数据,不用在意这些细节。很多时候我们都是通过sql语句在数据库中查询上面的数据,那么在页面上显示出来的时候,势必会变成下面这样的格式。时间水电费2014-07-08120232014-07-0844772014-07-0945662014-07-0943772014-07-1021452014-07-1054212014-07-1165342014-07-116527然后我们循环生成表格的html。一些善于提问的朋友可能会问,既然要这样显示,那么可以把电费和水费存为表中的列。这个话题我这里就不多说了,因为中国的收费越来越多,比如物业费、保护费、税费、天然气等等。所以我希望不管有多少种类的收费,它们可以被包含自动转换成列名信息,并以表格的形式呈现给用户。实现起来非常简单。指定主键字段、作为列名的字段、值字段,分别对应上例中的“time”、“category”、“cost”。主要思路是遍历JSON,获取每一行的类别值,作为列名存储。这里增加一个默认值,解决数据不全的问题。再用上面的例子,正确的做法是每天抄水表和电表来计算费用,那么哪天不写怎么办,转换后结构不完整吗,比如2014-07-09号码只有电费,连水费那一行都没有,所以转换成功后特意检查是否存在这种情况,如果存在则默认值为放。/*json数据行列转换*@jsonDatajson数据源*@idField条件字段*@colField生成列名字段*@valueField生成值字段*@emptyValue默认值避免一些不完整的数据*/functionrow2col(jsonData,idField,colField,valueField,emptyValue){varresult=[],//存储返回的数据idIndexData={},//存储数组中id的信息(位置)resultColumns={},//存储列名数据curRecord=null;//存储当前数据varcolFields=colField.split(',');///遍历整个JSON数组:[{...},{...},{...},...]for(varidx=0;idx
