0

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 }
Janio Carvalho
  • 117
  • 1
  • 2
  • 10
  • 2
    The value doesn't change, it is still the same array. You've just mutated that array. – Quentin Aug 09 '21 at 18:22
  • like if I comment out this snippet, labelAndCategories(inputArea[i], group, select, inputArea[i].timestamp, chartData);, the value of chartData is always empty... I'm quite a beginner.. – Janio Carvalho Aug 09 '21 at 18:29

0 Answers0