Как сравнить два массива в node.js - PullRequest
0 голосов
/ 03 августа 2020

У меня два массива.

let runArray = ['Welcome', 'Hello']

let data = [{
  Node:'Good',
  Session:'2',
  Run:'Welcome',
  Run_Group:'Display',
  Elapsed_Ms: '1000'
}]

У меня примерно 2600 объектов в массиве data и примерно 50 из них в runArray. И количество элементов могло бы быть больше.

Дело в том, чтобы сравнить каждый индекс в runArray с data[index].Run свойством, чтобы я мог вычислить среднее значение Elapsed_Ms свойства (по данным).

Есть ли варианты?

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Расширяя ваш существующий код, нам нужно l oop на значениях вашего 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);
0 голосов
/ 04 августа 2020

Ciao, вот рабочий пример:

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, a для l oop лучше для производительности.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...