I have a problem, I had to learn from the code below so far, so good, but when I got to let var charData, I didn't understand, this declaration is created in the scope of the preparDataChart, but it is modified when it is passed to another function as if it were a global variable, can someone help me?
function updateDatas(newInterval: any, chartData1: any) {
for (let i = 0; i < chartData1.length; i++) {
if (!timeStampCheck(newInterval, chartData1[i][0])) {
chartData1.splice(i, 1);
}
}
}
function labelAndCategories(sJson: any, group1: any, select1: any, timestamp1: any, chartData1: any) {
let label = "";
let labelgroup = [];
for (let i = 0; i < group1.length; i++) {
label = label + " " + sJson[group1[i]];
}
for (let i = 0; i < select1.length; i++) {
labelgroup[i] = label + " " + select1[i];
labelgroup[i] = labelgroup[i].replace(/_/g, " ");
//dic[labelgroup[i]] = sJson[select1[i]];
//alert(timestamp1+"_"+labelgroup[i]+"_"+sJson[select1[i]]);
chartData1.push([timestamp1, labelgroup[i], sJson[select1[i]]]);
}
}
function preparDataChart(str: any) {
let inputArea = formartInputToJson(str);
let index = lastIndex(inputArea);
if (index < 0) {
alert("No start event was found");
return false;
}
let chartData: any = [];
let select = inputArea[index].select;
let group = inputArea[index].group;
let timeStartAndTimeEnd: any = [];
let event = { "span": false, "data": false };
for (let i = index + 1; i < inputArea.length; i++) {
console.log(chartData);
switch (inputArea[i].type) {
case 'span':
timeStartAndTimeEnd = [inputArea[i].begin, inputArea[i].end];
if (event['span']) {
if (chartData.length > 0) {
updateDatas(timeStartAndTimeEnd, chartData);
}
} else {
event['span'] = true;
}
break;
case 'data':
if ((event['span']) && (timeStampCheck(timeStartAndTimeEnd, inputArea[i].timestamp))) {
labelAndCategories(inputArea[i], group, select, inputArea[i].timestamp, chartData);
}
break;
case 'stop':
if (chartData.length == 0) {
alert("There is no data to plot");
return false;
}
let aux1: any = {};
let aux2: any = {};
let list: any = [];
for (let i = 0; i < chartData.length; i++) {
try {
aux1[chartData[i][1]].push(chartData[i][2]);
} catch {
aux1[chartData[i][1]] = [chartData[i][2]];
}
}
// parse to formart object
for (let i in aux1) {
try {
// possible error, is always undefined
aux2[i].data = aux1[i];
} catch {
aux2[i] = { name: i, data: [] };
aux2[i].data = aux1[i];
list.push(aux2[i]);
}
}
// convert timestamp in date after cut date and get only seconds
let t1 = minInterval(timeStartAndTimeEnd[0]);
let t2 = minInterval(timeStartAndTimeEnd[1]);
return {
categories: [t1, t2],
series: list
};
default:
//alert(inputArea[i].type);
alert("Invalid event");
return false;
}
}
}
export { preparDataChart }