标签:des style blog color io ar for 数据 art
公司项目需要,动态生成表格数据。
代码还没有简化,暂时这样了!周末还加班!悲剧!
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 arr 55 * @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));
标签:des style blog color io ar for 数据 art
原文地址:http://www.cnblogs.com/kbqncf/p/3946695.html