首页 > 代码库 > 数据表格的生成

数据表格的生成

公司项目需要,动态生成表格数据。

代码还没有简化,暂时这样了!周末还加班!悲剧!

 

 

 1 /** 2          * @param array 3          * @description 笛卡尔积变换 4          * @returns {*[]} 5          */ 6         function cartesianProduct() { 7             var _returnArr = [ 8                 [], 9                 []10             ];//结果集11             var _arrG = Array.prototype.slice.call(arguments, 0);//等到参数数组12             var _argumentslength = _arrG.length;//参数长度13             var _totalRows = 1;//扁平化数据后的总行数14             var _serialize = [];//序列化数组15             for (var i = 0; i < _argumentslength; i++) {16                 _totalRows *= _arrG[i].length;17                 _returnArr[1].push(_arrG[i].length);18             }19             for (var i = 0; i < _totalRows; i++) {20                 _serialize[i] = [];21             }22             for (var i = 0; i < _argumentslength; i++) {23                 var item=_arrG.shift();24                 var itemLength = item.length;//第一个元素的长度25                 var stepLength;//多少步进行一次数据操作26                 if (i === 0) {27                     stepLength = _totalRows / itemLength;28                 } else {29                     stepLength = _totalRows / (itemLength * arguments[i - 1].length);30                 }31                 if (_arrG.length === 0) {32                     for (var n = 0; n < _totalRows; n++) {33                         _serialize[n].push(item[Math.floor(n % itemLength)]);34                     }35                 } else {36                     if (i === 0) {37                         for (var n = 0; n < _totalRows; n++) {38                             _serialize[n].push(item[Math.floor(n / stepLength)]);39                         }40                     } else {41                         for (var n = 0; n < _totalRows; n++) {42                             _serialize[n].push(item[Math.floor(n / stepLength) % itemLength]);43                         }44                     }45                 }46             }47             _returnArr[0] = _serialize;48             _returnArr.push(_totalRows);49             return _returnArr;50         }51 52         /**53          * @description table数据的组装54          * @param arr55          * @returns {string}56          */57         var assembleGridTable = function (arr) {58             var _arrResult = arr[0];//序列化的数据59             var _num = arr[1];//数据集长度信息60             var _totalRows = arr[2];//数据总行数61             var scanStep;//扫描长度62             for (var i = 0; i < _num.length - 1; i++) {63                 if (i === 0) {64                     scanStep = _totalRows / _num[i];//当在第scanStep位置的时候,添加信息65                 } else {66                     scanStep = _totalRows / (_num[i] * _num[i - 1]);//当在第scanStep位置的时候,添加信息67                 }68                 for (var n = 0, _len = _arrResult.length; n < _len; n++) {//循环数组的长度69                     if (n % scanStep === 0) {70                         _arrResult[n][i] = _arrResult[n][i].replace(‘d‘, ‘d rowspan="‘ + scanStep + ‘"‘);71                     } else {72                         _arrResult[n][i] = ‘‘;73                     }74                 }75             }76             //输出77             var _str = ‘‘;78             for (var i = 0, _len = _arrResult.length; i < _len; i++) {79                 _str += ‘<tr>‘ + _arrResult[i].join(‘‘) + ‘</tr>‘;80             }81             return _str;82         }83 84         var ck = cartesianProduct([‘<td>搞基</td>‘],[‘<td>美女</td>‘,‘<td>野兽</td>‘], [‘<td>a</td>‘], [‘<td>美帝</td>‘, ‘<td>天朝</td>‘, ‘<td>毛子</td>‘]);85         $(‘#J-table‘).html(assembleGridTable(ck));

 

数据表格的生成