'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 |
