JSFiddle - React, Tailwind, and code Playground

by tu genhua

HTML

<h1>没有JS操作合并前的效果</h1>
<table width="400" border=1 id="theTable" >
	<thead>
    	<tr>
        	<th>编号</th>
            <th>数字测试1</th>
            <th>数字测试2</th>
        </tr>
    </thead>
    <tbody>
    	<tr>
          <td>001</td>
          <td>2</td>
          <td>3</td>
        </tr>
        <tr>
          <td>004</td>
          <td>5</td>
          <td>6</td>
        </tr>
        <tr>
          <td>004</td>
          <td>5</td>
          <td>9</td>
        </tr>
        <tr>
          <td>005</td>
          <td>11</td>
          <td>12</td>
        </tr>
        <tr>
          <td>006</td>
          <td>14</td>
          <td>15</td>
        </tr>
        <tr>
          <td>006</td>
          <td>17</td>
          <td>18</td>
        </tr>
        <tr>
          <td>006</td>
          <td>8</td>
          <td>9</td>
        </tr>
        <tr>
          <td>007</td>
          <td>8</td>
          <td>9</td>
        </tr>
    </tbody>
</table>
<h1>JS操作合并后的效果</h1>
<table width="400" border=1 id="theTable" >
	<thead>
    	<tr>
        	<th>编号</th>
            <th>数字测试1</th>
            <th>数字测试2</th>
        </tr>
    </thead>
    <tbody id="j-tbody">
		
    </tbody>
</table>

JavaScript

//去掉数组重复项
   function unique(arr){
		arr = arr || [];
		var obj = {},
			ret = [];
		for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
			var curItem = arr[i],
				curItemType = typeof(curItem) + curItem;
			if(obj[curItemType] !== 1) {
				ret.push(curItem);
				obj[curItemType] = 1;
			}
		}
		return ret;
	}
	/**
	$.ajax({
		
	});**/
	// 假如返回数据如下:
	var data = [{'key':[{'num1':'001','n2':'4','n3':'5'}]},
				{'key':[{'num1':'002','n2':'44','n3':'55'},{'num1':'002','n2':'44','n3':'55'}]},
				{'key':[{'num1':'003','n2':'444','n3':'555'},{'num1':'003','n2':'444','n3':'555'}]},
				{'key':[{'num1':'004','n2':'666','n3':'666'},{'num1':'004','n2':'666','n3':'666'}]}
			   ];
		html = "";
	
	$('#j-tbody').html('');
	for(var i = 0; i < data.length; i++) {
		
		for(var j = 0; j < data[i].key.length; j++) {
			html += '<tr class="j-number" data-num="'+data[i].key[j].num1+'" data-len="'+data[i].key.length+'">'+
					  /*'<td>'+data[i].key[j].num1+'</td>'+ */
					  '<td>'+data[i].key[j].n2+'</td>'+
					  '<td>'+data[i].key[j].n3+'</td>'+
					'</tr>';
		}
	}
	$("#j-tbody").html(html);

	var rets = [];
	// 遍历tr 获取属性 data-num 
	$('.j-number').each(function(){
		var num = $(this).attr('data-num');
		rets.push(num);
	});
	var newArrs = unique(rets),
		domElems = $('.j-number');
	
    // 再次遍历新数组
	for(var m = 0; m < newArrs.length; m++) {
		for(var n = 0; n < domElems.length; n++) {
			var elemNum = $(domElems[n]).attr('data-num'),
				elemLen = $(domElems[n]).attr('data-len');
			if(newArrs[m] == elemNum) {
				var td = '<td rowspan="'+elemLen+'">'+elemNum+'</td>';
				$(domElems[n]).prepend(td);
				break;
			}
		}
	}