var arr = [{
refundNo: "15951892878",
busiName: "流量费1",
busiId: "123456",
offerName: "销售品1",
offerId: "111111",
month: "202110",
total: "1"
}, {
refundNo: "15951892878",
busiName: "流量费1",
busiId: "123456",
offerName: "销售品1",
offerId: "111111",
month: "202111",
total: "2"
}, {
refundNo: "15951892878",
busiName: "流量费2",
busiId: "654321",
offerName: "销售品2",
offerId: "222222",
month: "202110",
total: "3"
}, {
refundNo: "15951892878",
busiName: "流量费2",
busiId: "6543211",
offerName: "销售品2",
offerId: "222222",
month: "202110",
total: "4"
}, {
refundNo: "15951892878",
busiName: "流量费2",
busiId: "654321",
offerName: "销售品2",
offerId: "2222221",
month: "202110",
total: "5"
}, {
refundNo: "15951892878",
busiName: "流量费2",
busiId: "654321",
offerName: "销售品2",
offerId: "222222",
month: "202110",
total: "6"
}, {
refundNo: "13881782693",
busiName: "流量费3",
busiId: "321321",
offerName: "销售品3",
offerId: "333333",
month: "202110",
total: "7"
}]
$(function () {
var dest = filter(arr, "refundNo");
for (var i in dest) {
var dest2 = filter2(dest[i].data, "busiId", "offerId");
dest[i].data = dest2;
}
console.log(dest);
var additionTable = $("#additionTable");
// for (var i in dest) {
// var tr1 = $("<tr></tr>");
// tr.append("<td rowspan='" + dest[i].data[0].length + "'>" + dest[i].data[0].refundNo + "</td>");
// tr.append("<td rowspan='" + dest[i].data[0].length + "'>" + dest[i].data[0].busiName + "</td>");
// tr.append("<td rowspan='" + dest[i].data[0].length + "'>" + dest[i].data[0].busiId + "</td>");
// tr.append("<td rowspan='" + dest[i].data[0].length + "'>" + dest[i].data[0].offerName + "</td>");
// tr.append("<td rowspan='" + dest[i].data[0].length + "'>" + dest[i].data[0].offerId + "</td>");
// tr.append("<td>" + dest[i].data[0].data[0].month + "</td>");
// tr.append("<td>" + dest[i].data[0].data[0].total + "</td>");
// additionTable.append(tr1);
// for (var j in dest[i]["data"]) {
// if (j > 0) {
// var tr2 = $("<tr></tr>");
// tr.append("<td rowspan='" + + "'>" + dest[i].data[j].data[0].busiName + "</td>");
// tr.append("<td rowspan='" + + "'>" + dest[i].data[j].data[0].busiId + "</td>");
// tr.append("<td rowspan='" + + "'>" + dest[i].data[j].data[0].offerName + "</td>");
// tr.append("<td rowspan='" + + "'>" + dest[i].data[j].data[0].offerId + "</td>");
// for (var k in dest[i].data[j].data) {
// tr.append("<td rowspan='" + + "'>" + dest[i].data[j].data[k].month + "</td>");
// tr.append("<td rowspan='" + + "'>" + dest[i].data[j].data[k].total + "</td>");
// }
// }
// }
// additionTable.append(tr);
// }
// for (var i = 0; i < dest.length; i++) {
// console.log();
// var level2 = dest[i]["data"];
// for (var j = 0; j < level2.length; j++) {
// var level3 = level2[j]["data"];
// for (var k = 0; k < level3.length; k++) {
// var tr = $("<tr></tr>");
// if (j == 0) {
// tr.append("<td rowspan='" + (level2.length + level3.length) + "'>" + level3[k].refundNo + "</td>");
// tr.append("<td rowspan='" + level3.length + "'>" + level3[k].busiName + "</td>");
// tr.append("<td rowspan='" + level3.length + "'>" + level3[k].busiId + "</td>");
// tr.append("<td rowspan='" + level3.length + "'>" + level3[k].offerName + "</td>");
// tr.append("<td rowspan='" + level3.length + "'>" + level3[k].offerId + "</td>");
// tr.append("<td>" + level3[k].month + "</td>");
// tr.append("<td>" + level3[k].total + "</td>");
// } else {
// tr.append("<td>" + level3[k].month + "</td>");
// tr.append("<td>" + level3[k].total + "</td>");
// }
// additionTable.append(tr);
// }
// }
// }
for (var i = 0; i < dest.length; i++) {
var level1 = dest[i].data;
for (var j = 0; j < level1.length; j++) {
var level2 = level1[j].data;
for (var k = 0; k < level2.length; k++) {
var level3 = level2[k];
//// console.log(i + ">>>>>>>>>" + level3);
var phone = $("#" + level3.refundNo);
if (phone.length == 0) {
var tr = $("<tr id ='" + level3.refundNo + "'></tr>");
tr.append("<td id='" + (level3.busiId + level3.offerId) + "' rowspan='" + (level1.length + level2.length) + "'>" + level3.refundNo + "</td>");
tr.append("<td rowspan='" + level2.length + "'>" + level3.busiName + "</td>");
tr.append("<td rowspan='" + level2.length + "'>" + level3.busiId + "</td>");
tr.append("<td rowspan='" + level2.length + "'>" + level3.offerName + "</td>");
tr.append("<td rowspan='" + level2.length + "'>" + level3.offerId + "</td>");
tr.append("<td>" + level3.month + "</td>");
tr.append("<td>" + level3.total + "</td>");
additionTable.append(tr);
} else {
var busiIdAndofferid = $("#" + level3.busiId + level3.offerId);
if (busiIdAndofferid.length == 0) {
var tr = $("<tr></tr>");
tr.append("<td id='" + (level3.busiId + level3.offerId) + "' rowspan='" + level2.length + "'>" + level3.busiName + "</td>");
tr.append("<td rowspan='" + level2.length + "'>" + level3.busiId + "</td>");
tr.append("<td rowspan='" + level2.length + "'>" + level3.offerName + "</td>");
tr.append("<td rowspan='" + level2.length + "'>" + level3.offerId + "</td>");
tr.append("<td>" + level3.month + "</td>");
tr.append("<td>" + level3.total + "</td>");
additionTable.append(tr);
} else {
var tr = $("<tr></tr>");
tr.append("<td>" + level3.month + "</td>");
tr.append("<td>" + level3.total + "</td>");
additionTable.append(tr);
}
}
}
}
}
})
var filter2 = function (arr, param1, param2) {
var map = {}, dest = [];
for (var i = 0; i < arr.length; i++) {
var ai = arr[i];
if (!map[ai[param1]] || !map[ai[param2]]) {//如果param不同
dest.push({
[param1]: ai[param1],
[param2]: ai[param2],
data: [ai]
});
map[ai[param1]] = ai;
map[ai[param2]] = ai;
} else {//param相等
for (var j = 0; j < dest.length; j++) {
var dj = dest[j];
if (dj[param1] == ai[param1] && dj[param2] == ai[param2]) { //找到相等的param
dj.data.push(ai);
break;
}
}
}
}
return dest;
}
var filter = function (arr, param) {
var map = {}, dest = [];
for (var i = 0; i < arr.length; i++) {
var ai = arr[i];
if (!map[ai[param]]) {//如果param不同
dest.push({
[param]: ai[param],
data: [ai]
});
map[ai[param]] = ai;
} else {//param相等
for (var j = 0; j < dest.length; j++) {
var dj = dest[j];
if (dj[param] == ai[param]) { //找到相等的param
dj.data.push(ai);
break;
}
}
}
}
return dest;
}
<table id="additionTable" border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th rowspan="2">号码</th>
<th rowspan="2">争议账目项</th>
<th rowspan="2">账目项ID</th>
<th rowspan="2">争议销售品</th>
<th rowspan="2">销售品ID</th>
<th rowspan="2">争议账期</th>
<th colspan="2">争议金额</th>
</tr>
</thead>
<tbody>
<!-- <tr>
<td rowspan="3">销售品1</td>
<td rowspan="2">123456</td>
<td rowspan="2">2020/11/11</td>
<td rowspan="2">2022/12/12</td>
<td rowspan="2">15951892878</td>
<td>套餐1</td>
<td>限制</td>
</tr>
<tr>
<td>套餐2</td>
<td>限制</td>
</tr>
<tr>
<td>654321</td>
<td>2020/11/11</td>
<td>2022/12/12</td>
<td>13880440592</td>
<td>套餐3</td>
<td>限制</td>
</tr>
<tr>
<td rowspan="3">销售品2</td>
<td rowspan="2">123456</td>
<td rowspan="2">2020/11/11</td>
<td rowspan="2">2022/12/12</td>
<td rowspan="2">15951892878</td>
<td>套餐1</td>
<td>限制</td>
</tr>
<tr>
<td>套餐2</td>
<td>限制</td>
</tr>
<tr>
<td>654321</td>
<td>2020/11/11</td>
<td>2022/12/12</td>
<td>13880440592</td>
<td>套餐3</td>
<td>限制</td>
</tr> -->
</tbody>
</table>