вычисление среднего значения элементов в массиве

#javascript #typescript

Вопрос:

Я работаю над угловым приложением. У меня есть массив следующим образом:

 data = [
{
 num1:12.233,
 num2: 13.345
},
{
 num1:10.233,
 num2: 23.345
},
{
 num1:18.233,
 num2: 33.345
}
]
 

Аналогично, во время выполнения у меня может быть много элементов. Я хочу обойти массив таким образом, чтобы я мог добавить все num1 и разделить их на количество присутствующих num1. Например, я хочу написать код, который может принимать num1 из каждого элемента

 12.233   10.233   18.233 / 3(total num1 elements in array)
 

Аналогично для num2.

Как я могу это сделать?

Комментарии:

1. почему бы вам не использовать цикл for (от 0 до длины массива или использовать foreach), чтобы суммировать его и разделить на длину массива?

2. const avg = data.reduce((previousValue, currentValue) => previousValue currentValue.num1, 0) / data.length;

Ответ №1:

Вы можете просто использовать reduce , чтобы получить общее количество элементов, а затем разделить его на data.length

 const data = [
  {
    num1: 12.233,
    num2: 13.345,
  },
  {
    num1: 10.233,
    num2: 23.345,
  },
  {
    num1: 18.233,
    num2: 33.345,
  },
];

const avg = data.reduce((acc, curr) => acc   curr.num1, 0) / data.length;
console.log(avg); 

Для среднего значения num2 then вы можете аналогичным образом выполнить следующее:

 const avg = data.reduce((acc, curr) => acc   curr.num2, 0) / data.length;
 

Вы также можете получить average , используя a single iteration как:

 const data = [
  {
    num1: 12.233,
    num2: 13.345,
  },
  {
    num1: 10.233,
    num2: 23.345,
  },
  {
    num1: 18.233,
    num2: 33.345,
  },
];

const [avgNum1, avgNum2] = data
  .reduce((acc, curr) => [acc[0]   curr.num1, acc[1]   curr.num2], [0, 0])
  .map((n) => n / data.length);
console.log(avgNum1, avgNum2); 

Ответ №2:

Вы можете перебирать data и добавлять значения num1 и num2 к переменной, а затем делить ее на длину data (которая равна 3).

 const data = [
  {
    num1: 12.233,
    num2: 13.345
  },
  {
    num1: 10.233,
    num2: 23.345
  },
  {
    num1: 18.233,
    num2: 33.345
  }
]

let num1 = 0;
let num2 = 0;

for (let i = 0; i < data.length; i  ) {
  num1  = data[i].num1;
  num2  = data[i].num2;
}

const num1Avg = num1 / data.length;
const num2Avg = num2 / data.length;
console.log(`Average of num1: ${num1Avg}`)
console.log(`Average of num2: ${num2Avg}`) 

Ответ №3:

пусть среднее значение = data.reduce( (accumVariable, curValue) => accumVariable curValue.num1 , 0 ) / data.length

Комментарии:

1. Вы только что скопировали это снизу?

2. нет, после того, как я опубликовал, я нашел аналогичный ответ