'How can create a for loop that will output a value and then add its value to itself

I am coding a table with values. The values come from an xml doc.
What I need help with is in one of the columns I am trying to assign a value to a td and every time the loop goes around it adds the current value to the previous value.
Sort of like a number incremented by its own value.

For example:

Cumulative column
row one value: 2
row two value: 4; cumulative 6;
row three value 4; cumulative 10; 

Here is the code so far:

<table id='record' cellpadding='10px' style="text-align:left;">
  <thead>
    <tr>
      <th>Week</th>
      <th>Tested</th>
      <th>Positive</th>
      <th>Cumulative</th>
    </tr>                
  </thead>
  <tbody>
  </tbody>
</table>
<script>
window.onload = function() {

    const recordsTableRows = function() {
      let data = '';

      let tableRecords = document.querySelector('#record');

      fetch('DataDashboard.xml').then(function(resp) {
        return resp.text();
      }).then(function(data) {
        let parser = new DOMParser(),
          xmlDoc = parser.parseFromString(data, 'text/xml');
        let records = xmlDoc.querySelectorAll('RECORD');

        records.forEach(recordXmlNode => {
          let row = document.createElement('tr');

          //Week
          let td = document.createElement('td');
          td.innerText = recordXmlNode.children[0].innerHTML;
          row.appendChild(td);

          //Tested
          td = document.createElement('td');
          td.innerText = recordXmlNode.children[1].innerHTML;
          row.appendChild(td);

          //Positve
          td = document.createElement('td');
          td.innerText = recordXmlNode.children[2].innerHTML;
          row.appendChild(td);

          //Cumulative  
          td = document.createElement('td');
          td.innerText = recordXmlNode.children[3].innerHTML;
          row.appendChild(td);

          tableRecords.children[1].appendChild(row);

          numberOfWeeks = recordXmlNode.children[9].innerHTML;
          posDrive = parseFloat(recordXmlNode.children[3].innerHTML);
          posTest = parseFloat(recordXmlNode.children[4].innerHTML);
          employeesStuTest = parseFloat(recordXmlNode.children[2].innerHTML);

          posDrive += posTest;

          console.log(posTest);

          for (let i = 0; i < numberOfWeeks.length; i++) {
            posDrive += posDrive;
            posTest += posTest;

            cumulativeTotal = posEmployeesStu / employeesStuTest;
          }
        });
      });
    };

    recordsTableRows();
</script>

XML Sample:

<?xml version="1.0" standalone="yes"?>
<RECORDS>
  <RECORD>
    <week>3/16-20</week>
    <appointments>6</appointments>
    <empStdsTested>2</empStdsTested>
    <empStdsPositive>0</empStdsPositive>
    <empStdsPosHospital>0</empStdsPosHospital>
    <patientsTested>4</patientsTested>
    <patientsPositive>0</patientsPositive>
    <empStdsPosOffsite>1</empStdsPosOffsite>
    <empStdsPosHospitalOffsite>0</empStdsPosHospitalOffsite>
    <weekNumber>1</weekNumber>
  </RECORD>
  <RECORD>
    <week>3/23-27</week>
    <appointments>9</appointments>
    <empStdsTested>5</empStdsTested>
    <empStdsPositive>1</empStdsPositive>
    <empStdsPosHospital>0</empStdsPosHospital>
    <patientsTested>4</patientsTested>
    <patientsPositive>1</patientsPositive>
    <empStdsPosOffsite>1</empStdsPosOffsite>
    <empStdsPosHospitalOffsite>1</empStdsPosHospitalOffsite>
    <weekNumber>2</weekNumber>
  </RECORD>
  <RECORD>
    <week>3/30-4/3</week>
    <appointments>4</appointments>
    <empStdsTested>3</empStdsTested>
    <empStdsPositive>1</empStdsPositive>
    <empStdsPosHospital>0</empStdsPosHospital>
    <patientsTested>1</patientsTested>
    <patientsPositive>1</patientsPositive>
    <empStdsPosOffsite>1</empStdsPosOffsite>
    <empStdsPosHospitalOffsite>0</empStdsPosHospitalOffsite>
    <weekNumber>3</weekNumber>
  </RECORD>
</RECORDS>


Solution 1:[1]

I will do something like that: (Real XML names are USEFUL)

window.onload = () =>
  {
  const 
    tableRecords = document.querySelector('#record tbody')
  , parserXML    = new DOMParser()
  , getXmlTxt    = (obj,name) => obj.querySelector(name).textContent
  , cumuls =
    { appointments     : 0
    , numberOfWeeks    : 0
    , posDrive         : 0
    , posTest          : 0
    , employeesStuTest : 0
    }
  
    recordsTableRows()  
    
    function recordsTableRows() 
      {
      fetch( 'DataDashboard.xml')
      .then( resp => resp.text())
      .then( data => 
        {
        parserXML
        .parseFromString(data, 'application/xml')
        .querySelectorAll('RECORD')
        .forEach( record =>
          { 
          let row = tableRecords.insertRow()
                  
          row.insertCell().textContent = getXmlTxt(record, 'week')            // Week
          row.insertCell().textContent = getXmlTxt(record, 'empStdsTested')   // Tested
          row.insertCell().textContent = getXmlTxt(record, 'empStdsPositive') // Positve

          cumuls.appointments += Number(getXmlTxt(record, 'appointments') )
          row.insertCell().textContent = cumuls.appointments

          cumuls.numberOfWeeks    += Number( getXmlTxt(record, 'weekNumber')         )   
          cumuls.posDrive         += Number( getXmlTxt(record, 'empStdsPosHospital') )
          cumuls.posTest          += Number( getXmlTxt(record, 'patientsTested')     )
          cumuls.employeesStuTest += Number( getXmlTxt(record, 'empStdsPosOffsite')  )
          }) // forEach
        }) // fetch 
      }  // functioh
    }  // onload

For testing :

const data = `<?xml version="1.0" standalone="yes"?>
<RECORDS>
  <RECORD>
    <week>3/16-20</week>
    <appointments>6</appointments>
    <empStdsTested>2</empStdsTested>
    <empStdsPositive>0</empStdsPositive>
    <empStdsPosHospital>0</empStdsPosHospital>
    <patientsTested>4</patientsTested>
    <patientsPositive>0</patientsPositive>
    <empStdsPosOffsite>1</empStdsPosOffsite>
    <empStdsPosHospitalOffsite>0</empStdsPosHospitalOffsite>
    <weekNumber>1</weekNumber>
  </RECORD>
  <RECORD>
    <week>3/23-27</week>
    <appointments>9</appointments>
    <empStdsTested>5</empStdsTested>
    <empStdsPositive>1</empStdsPositive>
    <empStdsPosHospital>0</empStdsPosHospital>
    <patientsTested>4</patientsTested>
    <patientsPositive>1</patientsPositive>
    <empStdsPosOffsite>1</empStdsPosOffsite>
    <empStdsPosHospitalOffsite>1</empStdsPosHospitalOffsite>
    <weekNumber>2</weekNumber>
  </RECORD>
  <RECORD>
    <week>3/30-4/3</week>
    <appointments>4</appointments>
    <empStdsTested>3</empStdsTested>
    <empStdsPositive>1</empStdsPositive>
    <empStdsPosHospital>0</empStdsPosHospital>
    <patientsTested>1</patientsTested>
    <patientsPositive>1</patientsPositive>
    <empStdsPosOffsite>1</empStdsPosOffsite>
    <empStdsPosHospitalOffsite>0</empStdsPosHospitalOffsite>
    <weekNumber>3</weekNumber>
  </RECORD>
</RECORDS>`

const 
  tableRecords = document.querySelector('#record tbody')
, parserXML    = new DOMParser()
, getXmlTxt    = (obj,name) => obj.querySelector(name).textContent
, cumuls =
  { appointments     : 0
  , numberOfWeeks    : 0
  , posDrive         : 0
  , posTest          : 0
  , employeesStuTest : 0
  }
  
parserXML
.parseFromString(data, 'application/xml')
.querySelectorAll('RECORD')
.forEach( record =>
  { 
  let row = tableRecords.insertRow()
        
  row.insertCell().textContent = getXmlTxt(record, 'week')            // Week
  row.insertCell().textContent = getXmlTxt(record, 'empStdsTested')   // Tested
  row.insertCell().textContent = getXmlTxt(record, 'empStdsPositive') // Positve

  cumuls.appointments += Number(getXmlTxt(record, 'appointments') )
  row.insertCell().textContent = cumuls.appointments

  cumuls.numberOfWeeks    += Number( getXmlTxt(record, 'weekNumber')         )   
  cumuls.posDrive         += Number( getXmlTxt(record, 'empStdsPosHospital') )
  cumuls.posTest          += Number( getXmlTxt(record, 'patientsTested')     )
  cumuls.employeesStuTest += Number( getXmlTxt(record, 'empStdsPosOffsite')  )
  })
body {
  font-family : Arial, Helvetica, sans-serif;
  font-size   : 16px;
  }
table {
  border-collapse  : separate;
  border-spacing   : 1px;
  background-color : darkblue;
  margin           : 1em; 
  }
th, td {
  border     : none;
  background : whitesmoke;
  padding    : .3em .6em;
  text-align : center;
  }
<table id='record'>
  <thead>
    <tr>
      <th>Week</th>
      <th>Tested</th>
      <th>Positive</th>
      <th>Cumulative</th>
    </tr>                
  </thead>
  <tbody>
  </tbody>
</table>

PS :

, getXmlTxt    = (obj,name) => obj.querySelector(name).textContent

is made to replace

row.insertCell().textContent = record.querySelector('week').textContent  

by:

row.insertCell().textContent = getXmlTxt(record, 'week')  

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1