Плз Попробуйте и дайте мне знать, если какие-либо проблемы.
data = [{
"amount": 49644,
"billdate": "2018-09-01",
"counter": "North Indian",
"outlet": "JAYANAGAR"
},
{
"amount": 194495,
"billdate": "2018-09-01",
"counter": "South Indian-1-Flr",
"outlet": "JAYANAGAR"
},
{
"amount": 80768,
"billdate": "2018-09-01",
"counter": "Take-away counter 1",
"outlet": "JAYANAGAR"
},
{
"amount": 60878,
"billdate": "2018-09-01",
"counter": "Coffee Counter",
"outlet": "JAYANAGAR"
},
{
"amount": 81999,
"billdate": "2018-09-01",
"counter": "Trade Pos1",
"outlet": "JAYANAGAR"
},
{
"amount": 8642,
"billdate": "2018-09-01",
"counter": "Trade Pos 2",
"outlet": "JAYANAGAR"
},
{
"amount": 53822,
"billdate": "2018-09-01",
"counter": "Restaurant",
"outlet": "MALLESHWARAM"
},
{
"amount": 15339,
"billdate": "2018-09-01",
"counter": "Coffee Counter",
"outlet": "MALLESHWARAM"
},
{
"amount": 7548,
"billdate": "2018-09-01",
"counter": "Takeaway",
"outlet": "MALLESHWARAM"
},
{
"amount": 15432,
"billdate": "2018-09-01",
"counter": "Trade POS",
"outlet": "MALLESHWARAM"
},
{
"amount": 107602,
"billdate": "2018-09-01",
"counter": "Restaurant",
"outlet": "KOLAR"
},
{
"amount": 7711,
"billdate": "2018-09-01",
"counter": "Trade POS",
"outlet": "KOLAR"
},
{
"amount": 39,
"billdate": "2018-09-02",
"counter": "North Indian",
"outlet": "JAYANAGAR"
},
{
"amount": 118647,
"billdate": "2018-09-02",
"counter": "South Indian-1-Flr",
"outlet": "JAYANAGAR"
},
{
"amount": 119871,
"billdate": "2018-09-02",
"counter": "South Indian-2-Flr",
"outlet": "JAYANAGAR"
},
{
"amount": 109527,
"billdate": "2018-09-02",
"counter": "Take-away counter 1",
"outlet": "JAYANAGAR"
},
{
"amount": 64771,
"billdate": "2018-09-02",
"counter": "Coffee Counter",
"outlet": "JAYANAGAR"
},
{
"amount": 78037,
"billdate": "2018-09-02",
"counter": "Trade Pos1",
"outlet": "JAYANAGAR"
},
{
"amount": 20261,
"billdate": "2018-09-02",
"counter": "Trade Pos 2",
"outlet": "JAYANAGAR"
},
{
"amount": 69946,
"billdate": "2018-09-02",
"counter": "Restaurant",
"outlet": "MALLESHWARAM"
},
{
"amount": 18197,
"billdate": "2018-09-02",
"counter": "Coffee Counter",
"outlet": "MALLESHWARAM"
},
{
"amount": 8741,
"billdate": "2018-09-02",
"counter": "Takeaway",
"outlet": "MALLESHWARAM"
},
{
"amount": 18820,
"billdate": "2018-09-02",
"counter": "Trade POS",
"outlet": "MALLESHWARAM"
},
{
"amount": 78537,
"billdate": "2018-09-02",
"counter": "Restaurant",
"outlet": "KOLAR"
},
{
"amount": 5060,
"billdate": "2018-09-02",
"counter": "Trade POS",
"outlet": "KOLAR"
},
{
"amount": 49096,
"billdate": "2018-09-03",
"counter": "Take-away counter 1",
"outlet": "JAYANAGAR"
},
{
"amount": 58477,
"billdate": "2018-09-03",
"counter": "Coffee Counter",
"outlet": "JAYANAGAR"
},
{
"amount": 49933,
"billdate": "2018-09-03",
"counter": "Trade Pos1",
"outlet": "JAYANAGAR"
},
{
"amount": 9915,
"billdate": "2018-09-03",
"counter": "Trade Pos 2",
"outlet": "JAYANAGAR"
},
{
"amount": 51209,
"billdate": "2018-09-03",
"counter": "Restaurant",
"outlet": "KOLAR"
},
{
"amount": 2566,
"billdate": "2018-09-03",
"counter": "Trade POS",
"outlet": "KOLAR"
}
];
function formatData(data) {
let toReturn = [];
let dateWiseObj = {};
let maxUniqueForOutlets = {};
data.forEach(function(d) {
if (!maxUniqueForOutlets[d["outlet"]]) {
maxUniqueForOutlets[d["outlet"]] = [];
}
if (maxUniqueForOutlets[d["outlet"]].indexOf(d["counter"]) == -1) {
maxUniqueForOutlets[d["outlet"]].push(d["counter"]);
}
if (!dateWiseObj[d["billdate"]]) {
dateWiseObj[d["billdate"]] = {};
dateWiseObj[d["billdate"]][d["outlet"]] = {};
dateWiseObj[d["billdate"]][d["outlet"]][d["counter"]] = d;
} else {
if (!dateWiseObj[d["billdate"]][d["outlet"]]) {
dateWiseObj[d["billdate"]][d["outlet"]] = {};
dateWiseObj[d["billdate"]][d["outlet"]][d["counter"]] = d;
} else {
if (!dateWiseObj[d["billdate"]][d["outlet"]][d["counter"]]) {
dateWiseObj[d["billdate"]][d["outlet"]][d["counter"]] = d;
}
}
}
});
return {
dateWiseObj: dateWiseObj,
maxUniqueForOutlets: maxUniqueForOutlets
};
};
function addTable(dataObj) {
let dateWiseObj = dataObj.dateWiseObj;
let maxUniqueForOutlets = dataObj.maxUniqueForOutlets;
let table = document.createElement("table");
let thead = document.createElement("thead");
let headerRow = document.createElement("tr");
let th = document.createElement("th");
th.innerHTML = "Outlet";
headerRow.appendChild(th);
th = document.createElement("th");
th.innerHTML = "Total";
headerRow.appendChild(th);
Object.keys(maxUniqueForOutlets).forEach(function(d) {
th = document.createElement("th");
th.innerHTML = d;
th.colSpan = maxUniqueForOutlets[d].length + 1;
headerRow.appendChild(th);
});
table.appendChild(thead);
thead.appendChild(headerRow);
headerRow = document.createElement("tr");
th = document.createElement("th");
th.innerHTML = "Date";
headerRow.appendChild(th);
th = document.createElement("th");
th.innerHTML = "Counter";
headerRow.appendChild(th);
Object.keys(maxUniqueForOutlets).forEach(function(k) {
th = document.createElement("th");
th.innerHTML = "Total";
headerRow.appendChild(th);
maxUniqueForOutlets[k].forEach(function(d) {
th = document.createElement("th");
th.innerHTML = d;
headerRow.appendChild(th);
});
});
table.appendChild(thead);
thead.appendChild(headerRow);
let tbody = document.createElement("tbody");
Object.keys(dateWiseObj).forEach(function(k) {
let row = document.createElement("tr");
let td = document.createElement("td");
td.innerHTML = k;
row.appendChild(td);
grandTotal = 0;
outletWiseTotal = {};
Object.keys(maxUniqueForOutlets).map(function(d) {
outletWiseTotal[d] = 0;
if (dateWiseObj[k][d]) {
Object.keys(dateWiseObj[k][d]).forEach(function(i) {
outletWiseTotal[d] += parseInt(dateWiseObj[k][d][i]["amount"] || "0");
});
}
grandTotal += outletWiseTotal[d];
});
td = document.createElement("td");
td.innerHTML = grandTotal;
row.appendChild(td);
Object.keys(maxUniqueForOutlets).map(function(d) {
td = document.createElement("td");
td.innerHTML = outletWiseTotal[d];
row.appendChild(td);
if (dateWiseObj[k][d]) {
maxUniqueForOutlets[d].forEach(function(i) {
td = document.createElement("td");
td.innerHTML = dateWiseObj[k][d][i] ? dateWiseObj[k][d][i]["amount"] : "0";
row.appendChild(td);
});
} else {
maxUniqueForOutlets[d].forEach(function(i) {
td = document.createElement("td");
td.innerHTML = "0";
row.appendChild(td);
});
}
});
tbody.appendChild(row);
//console.log(outletWiseTotal);
});
table.appendChild(tbody);
let divContainer = document.getElementById("tbl");
divContainer.innerHTML = "";
divContainer.appendChild(table);
table.classList.add("table");
table.classList.add("table-striped");
table.classList.add("table-bordered");
}
var dataObj = formatData(data);
addTable(dataObj);
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div id="tbl"></div>