自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JSON數(shù)據(jù)行轉(zhuǎn)列的應用 附完整示例下載

開發(fā) 前端
費勁的弄出表格,才發(fā)現(xiàn),弄成了每天的水電費,不過是測試數(shù)據(jù),不要在意這些細節(jié)。很多時候我們就通過sql語句在數(shù)據(jù)庫中查詢到如上數(shù)據(jù),那么展現(xiàn)到頁面的時候,勢必要變成下面一種格式。

背景

先說說為什么要弄什么行轉(zhuǎn)列。

時間 類別 費用
2014-07-08 電費 120
2014-07-08      水費 23
2014-07-09 電費 44
2014-07-09 水費 77
2014-07-10 電費 45
2014-07-10 水費 21
2014-07-11 電費 34
2014-07-11 水費 27

 

 

 

 

 

 

 

費勁的弄出表格,才發(fā)現(xiàn),弄成了每天的水電費,不過是測試數(shù)據(jù),不要在意這些細節(jié)。

很多時候我們就通過sql語句在數(shù)據(jù)庫中查詢到如上數(shù)據(jù),那么展現(xiàn)到頁面的時候,勢必要變成下面一種格式。

時間 電費 水費
2014-07-08 120 23
2014-07-08      44 77
2014-07-09 45 66
2014-07-09 43 77
2014-07-10 21 45
2014-07-10 54 21
2014-07-11 65 34
2014-07-11 65 27

 

 

 

 

 

 

 

 

那我們循環(huán)來生成table的html吧。

有些善于提問的朋友可能會問到,既然要這樣顯示,那么可以把電費和水費作為列存儲在table中啊。這里不多討論這個話題,因為中國的收費越來越多,物業(yè)費、保護費、稅收、天然氣等等各種名目......

因此才希望無論費用類別有多少種,都能把它自動轉(zhuǎn)換成列名信息,以表格形式呈現(xiàn)在用戶面前。

實現(xiàn)

實現(xiàn)起來很簡單,指定主鍵字段,用來作為列名的字段,值字段,對應上面的實例依次為 "時間",“類別”,"費用"。

主要思路則是,遍歷JSON,取到每一行的類別的值,作為列名存儲。

這里增加了一個默認值,意在解決數(shù)據(jù)不完整的問題。

再次用下上面的實例,正確的做法是每天都會對水表和電表進行抄表計算費用,那么萬一哪天沒寫怎么辦,那轉(zhuǎn)換后該結(jié)構(gòu)不是不完整了嗎,比如2014-07-09號只有電費,連水費這一行數(shù)據(jù)都沒有,因此在轉(zhuǎn)換成功后,特意檢測了是否存在這樣的情況,如果存在,則設置默認值。

  1. /* json數(shù)據(jù)行列轉(zhuǎn)換  
  2.      * @jsonData json數(shù)據(jù)源  
  3.      * @idField  條件字段  
  4.      * @colField 生成列名的字段  
  5.      * @valueField 生成值的字段  
  6.      * @emptyValue 默認值 避免有些數(shù)據(jù)不全  
  7.     */ 
  8.     function row2col(jsonData, idField, colField, valueField, emptyValue) {  
  9.         var result = [], //存儲返回的數(shù)據(jù)  
  10.             idIndexData = {},//存儲id在數(shù)組中的信息(位置)  
  11.             resultColumns = {},//存儲列名數(shù)據(jù)  
  12.             curRecord = null;//存儲當前數(shù)據(jù)  
  13.  
  14.         var colFields = colField.split(','); //  
  15.  
  16.         // 循環(huán)整個JSON數(shù)組:[{...},{...},{...},...]    
  17.         for (var idx = 0; idx < jsonData.length; idx++) {  
  18.  
  19.             //當前json數(shù)據(jù)對象  
  20.             var cdata = jsonData[idx];  
  21.  
  22.             //根據(jù)主鍵值,查找到結(jié)果數(shù)組中的索引號  
  23.             var idValue = cdata[idField];  
  24.             var num = idIndexData[idValue];//獲取存儲該id的數(shù)組索引號  
  25.             if (num != null) {  
  26.                 curRecord = result[num];  
  27.             } else {  
  28.                 //初始化數(shù)據(jù)時保持完整的結(jié)構(gòu)信息 避免因為缺乏數(shù)據(jù),缺乏指定的列數(shù)據(jù)  
  29.                 curRecord = {};  
  30.             }  
  31.  
  32.             // 指定的colFields列下的數(shù)據(jù)作為y軸,則取出該列的數(shù)據(jù)作為y軸即可  
  33.             for (var i in colFields) {  
  34.                 var key = colFields[i];  
  35.  
  36.                 //獲取到colField的值,作為列名  
  37.                 var value = cdata[valueField];  
  38.                 curRecord[value] = cdata[key];  
  39.  
  40.                 //存儲列名  
  41.                 resultColumns[value] = null;  
  42.                 break;  
  43.             }  
  44.  
  45.             //除數(shù)據(jù)內(nèi)容外,還需要添加主鍵數(shù)據(jù)    
  46.             curRecord[idField] = idValue;  
  47.  
  48.             //對象若為新建 則新增進數(shù)組  
  49.             if (num == null) {  
  50.                 idIndexData[idValue] = result.push(curRecord) - 1;  
  51.             }  
  52.         }  
  53.  
  54.         //數(shù)據(jù)檢查 由于是將行數(shù)據(jù)作為列名,則可能會存在部分行缺少其他列數(shù)據(jù),若缺少,則指定默認值  
  55.         for (var i in result) {  
  56.             for (var name in resultColumns) {  
  57.                 if (!result[i].hasOwnProperty(name)) result[i][name] = emptyValue;  
  58.             }  
  59.         }  
  60.         return result;  
  61.     } 

完整示例下載

責任編輯:林師授 來源: 博客園
相關推薦

2021-12-16 22:59:21

SQL報表應用

2024-10-16 21:17:59

2021-06-23 10:13:00

SQL行轉(zhuǎn)列列轉(zhuǎn)行

2021-11-08 23:08:06

SQL Serve數(shù)據(jù)庫開發(fā)

2022-08-11 16:29:32

Tekton流水線遷移工作流

2010-07-13 16:20:30

SQL Server數(shù)

2010-07-28 09:09:55

SQL

2025-04-03 08:00:51

2010-11-03 14:28:15

DB2行轉(zhuǎn)列

2011-03-08 13:55:46

2010-07-13 16:07:26

SQL Server行

2018-05-17 10:45:03

大數(shù)據(jù)分析報告京津冀

2023-02-19 15:26:51

深度學習數(shù)據(jù)集

2021-10-14 06:51:55

數(shù)據(jù)庫SQL

2011-08-19 14:53:02

SQL ServerDataRelatio

2010-08-18 13:30:08

Ubuntu 10.0

2025-03-25 00:47:02

2017-05-27 06:32:36

JSONC代碼函數(shù)

2021-07-20 10:59:22

云計算架構(gòu)示例云應用

2011-05-20 15:46:45

RubyGemsRuby
點贊
收藏

51CTO技術棧公眾號