functionarrayMax(arr){varlen=arr.length,max=-Infinity;while(len--){if(arr[len]>max){max=arr[len];}}returnmax;};consttable={Co:{breakpoints:[0,4.4,4.5,9.4,9.5,12.4,12.5,15.4,15.5,30.4,30.5,40.4,40.5,50.4],aq:[0,50,51,100,101,150,151,200,201,300,301,400,401,500]},So:{breakpoints:[0.000,0.034,0.035,0.144,0.145,0.224,0.225,0.304,0.305,0.604,0.605,0.804,0.805,1.004],aq:[0,50,51,100,101,150,151,200,201,300,301,400,401,500]},No:{breakpoints:[0.65,1.24,1.25,1.64,1.65,2.04],aq:[201,300,301,400,401,500]}};functioncalculateAQI(gasName,concentration){varbpLow,bpHi;varbpLowIndex,bpHiIndex;table[gasName].breakpoints.forEach(function(value,index){if(value<=concentration&&table[gasName].breakpoints[index+1]>=concentration){bpLow=value;bpLowIndex=index;}if(value>=concentration&&table[gasName].breakpoints[index-1]<=concentration){bpHi=value;bpHiIndex=index;}});varairQualityIndex=((table[gasName].aq[bpHiIndex]-table[gasName].aq[bpLowIndex])/(bpHi-bpLow))*(concentration-bpLow)+table[gasName].aq[bpLowIndex];returnairQualityIndex;}functionupdate(){vardata;fetch('/latest').then(function(resp){returnresp.json();}).then(function(response){data=response;vartable=document.querySelector('#latest').children;table[0].textContent=data.TimeStamp;table[1].textContent=data.Co;table[2].textContent=data.No;table[3].textContent=data.So;varindexes=[];varCO=isNaN(calculateAQI("Co",data.Co))?0:calculateAQI("Co",data.Co);varSO=isNaN(calculateAQI("So",data.So))?0:calculateAQI("So",data.So);varNO=isNaN(calculateAQI("No",data.No))?0:calculateAQI("No",data.No);indexes.push(CO);indexes.push(NO);indexes.push(SO);varmax=arrayMax(indexes);document.querySelector("#aq").innerHTML=`The current air quality index is <strong>${max}</strong>`;}).catch(function(error){console.log(error);});}functiondrawChart(){}setInterval(update,10000);