[英]How to compare two arrays in node.js
我有两个 arrays。
let runArray = ['Welcome', 'Hello']
let data = [{
Node:'Good',
Session:'2',
Run:'Welcome',
Run_Group:'Display',
Elapsed_Ms: '1000'
}]
我在data
数组中有 2600 个对象,在runArray
中有 50 个对象。 而且元素的数量可能更多。
重点是将runArray
中的每个索引与data[index].Run
属性进行比较,以便我可以计算Elapsed_Ms
属性的平均值(来自数据)。
有什么选择吗?
再见,这里是一个工作示例:
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)
编辑:正如@MattJHoughton 所建议的,for 循环对性能更好。
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)
扩展您现有的代码,我们需要循环您的runArray
的值以查找data
数组中的任何匹配项目,保持总运行时间的运行总和和数据项计数。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.