The following code loops through two arrays and after the run outputs the following.
GraphCategories = [
"AdminFee",
"AdminFeeVat",
"CaptureCharge",
"CaptureChargeVat",
"CardReplacementFee",
"CardReplacementFeeVat",
"DriverBillAllowFee",
"DriverBillAllowFeeVat",
"FleetSaverFee",
"FleetSaverFeeVat",
"FuncdingInt",
"LostCardProtectionFee",
"LostCardProtectionFeeVat",
"Other",
"OtherVat",
"TransactionCharge",
"TransactionChargeVat",
"TurnkeyFee",
"TurnkeyFeeVat",
"WalletReplacementFee",
"WalletReplacementFeeVat"
];
seriesData =
[
{name: "AdminFee", group: "2019-10", y: 262038},
{name: "AdminFee", group: "2019-11", y: 262038},
{name: "AdminFeeVat", group: "2019-10", y: 39341.4},
{name: "AdminFeeVat", group: "2019-11", y: 39341.4},
{name: "CaptureCharge", group: "2019-10", y: 0},
{name: "CaptureCharge", group: "2019-11", y: 0},
{name: "CaptureChargeVat", group: "2019-10", y: 0}
];
function BuildStacked(seriesData, GraphCategories) {
var newGraphdata = [];
seriesData.forEach(function (SeriesVal, SeiresKey) {
let previousVal = false;
GraphCategories.forEach(function (GraphVal, GraphKey) {
if (SeriesVal.name === GraphVal) {
if (previousVal === false) {
console.log(previousVal);
console.log(GraphVal);
if (previousVal !== GraphVal) {
newGraphdata.push({ 'name': SeriesVal.name, 'data': [SeriesVal.y], 'stack': SeriesVal.group });
previousVal = SeriesVal.name;
}
}
};
});
});
console.log(newGraphdata);
}
This is the final array generated by the code
Array
0: {name: "AdminFee", data: Array(1), stack: "2019-10"}
1: {name: "AdminFee", data: Array(1), stack: "2019-11"}
2: {name: "AdminFeeVat", data: Array(1), stack: "2019-10"}
3: {name: "AdminFeeVat", data: Array(1), stack: "2019-11"}
4: {name: "CaptureCharge", data: Array(1), stack: "2019-10"}
5: {name: "CaptureCharge", data: Array(1), stack: "2019-11"}
6: {name: "CaptureChargeVat", data: Array(1), stack: "2019-10"}
7: {name: "CaptureChargeVat", data: Array(1), stack: "2019-11"}
End Result should be as follow.
Where values from key 3 and 4 merged into the keys 1 and 2. since name contains an already inserted item
0: {name: "AdminFee", data: Array(1), stack: "2019-10"}
1: {name: "AdminFee", data: Array(1), stack: "2019-11"}
2: {name: "AdminFeeVat", data: Array(1), stack: "2019-10"}
3: {name: "AdminFeeVat", data: Array(1), stack: "2019-11"}
||
||
\/
0: {name: "AdminFee", data: Array(2), stack: "2019-10"}
1: {name: "AdminFee", data: Array(2), stack: "2019-11"}
So the output I am trying to achieve is more or less in the following format
{
name: 'AdminFee',
data: [AdminFee.data, AdminFeeVat.data],
stack: '2019-10'
}, {
name: 'AdminFee',
data: [AdminFee.data, AdminFeeVat.data],
stack: '2019-11'
}
The join should happen in data when AdminFee , AdminFeeVat has the same stack/date
So at the end of the day the result should be
0: {name: "AdminFee", data: Array(2), stack: "2019-10"}
1: {name: "AdminFee", data: Array(2), stack: "2019-11"}