简体   繁体   中英

How to compare two arrays in node.js

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM