I have two arrays.
let runArray = ['Welcome', 'Hello']
let data = [{
Node:'Good',
Session:'2',
Run:'Welcome',
Run_Group:'Display',
Elapsed_Ms: '1000'
}]
I have like 2600 objects in data
array and like 50 of them in runArray
. And the number of elements could be more.
The point is to compare every index in runArray
with data[index].Run
propery so I can calculate the average of Elapsed_Ms
property (from data).
Is there any options?
Ciao, here a working example:
let runArray = ['Welcome', 'Hello']; let data = [{Node:'Good', Session:'2', Run:'Welcome', Run_Group:'Display', Elapsed_Ms: '1000'}, {Node:'Good', Session:'2', Run:'Welcome', Run_Group:'Display', Elapsed_Ms: '500'}, {Node:'Good', Session:'2', Run:'Hello', Run_Group:'Display', Elapsed_Ms: '1000'}]; let averages = []; runArray.map(el => { let filteredArray = data.filter(dat => dat.Run === el); let avg = filteredArray.reduce((a, b) => a + parseInt(b.Elapsed_Ms), 0)/filteredArray.length; let appo_obj = {index: el, average: avg}; averages.push(appo_obj); }) console.log(averages)
Edit : as @MattJHoughton suggested, a for loop is better for performance.
let runArray = ['Welcome', 'Hello']; let data = [{Node:'Good', Session:'2', Run:'Welcome', Run_Group:'Display', Elapsed_Ms: '1000'}, {Node:'Good', Session:'2', Run:'Welcome', Run_Group:'Display', Elapsed_Ms: '500'}, {Node:'Good', Session:'2', Run:'Hello', Run_Group:'Display', Elapsed_Ms: '1000'}]; let averages = []; for(let i=0; i<runArray.length;i++) { let filteredArray = data.filter(dat => dat.Run === runArray[i]); let avg = filteredArray.reduce((a, b) => a + parseInt(b.Elapsed_Ms), 0)/filteredArray.length; let appo_obj = {index: runArray[i], average: avg}; averages.push(appo_obj); } console.log(averages)
Expanding on your existing code, we need to loop on the values of your runArray
finding any matching items in your data
array, keeping a running sum of total elapsed time, and the data item count.
let runArray = ['Welcome', 'Hello']; let data = [{ Node:'Good', Session:'2', Run:'Welcome', Run_Group:'Display', Elapsed_Ms: '1000' }]; let sumElapsedMs = 0; let numberOfItems = 0; // loop over runArray runArray.forEach((value) => { // find the first matching entry in data array const matchedDataItem = data.find((dataItem) => { return dataItem.Run === value; }); // sum total elapsed & number of data entries if (matchedDataItem) { numberOfItems++; sumElapsedMs += matchedDataItem.Elapsed_Ms; } }); // calculate average (else default: undefined) const averageElapsedMs = numberOfItems? sumElapsedMs/numberOfItems: undefined; console.log('Average Elapsed (mS)', averageElapsedMs);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.