Как подсчитать среднюю цену в каждом массиве объектов?

reduce почему то работает только если в массиве 2 объекта, в остальных случаях возвращает NaN.

let arr = [{price: 10}];
let arr2 = [{price: 10}, {price: 100}];
let arr3 = [{price: 10}, {price: 100}, {price: 1000}];
let arr4 = [{price: 10}, {price: 100}, {price: 1000}, {price: 10000}];

console.log( arr.reduce((a, b) => (a.price + b.price)) / arr.length );
console.log( arr2.reduce((a, b) => (a.price + b.price)) / arr2.length ); // 55
console.log( arr3.reduce((a, b) => (a.price + b.price)) / arr3.length );
console.log( arr4.reduce((a, b) => (a.price + b.price)) / arr4.length );


Ответы (1 шт):

Автор решения: Aziz Umarov

Как-то так.

Нужно понимать что первый параметер reduce - это аккумулятор.

let arr = [{price: 10}];
let arr2 = [{price: 10}, {price: 100}];
let arr3 = [{price: 10}, {price: 100}, {price: 1000}];
let arr4 = [{price: 10}, {price: 100}, {price: 1000}, {price: 10000}];

console.log( arr.reduce((a, b) => (a + b.price),0) / arr.length );
console.log( arr2.reduce((a, b) => (a + b.price),0) / arr2.length ); // 55
console.log( arr3.reduce((a, b) => (a + b.price),0) / arr3.length );
console.log( arr4.reduce((a, b) => (a + b.price),0) / arr4.length );

можно и объектами, но сложнее и будет пойчительно.

let arr = [{price: 10}];
let arr2 = [{price: 10}, {price: 100}];
let arr3 = [{price: 10}, {price: 100}, {price: 1000}];
let arr4 = [{price: 10}, {price: 100}, {price: 1000}, {price: 10000}];

console.log( arr.reduce((a, b) => (a.price+= b.price, a) ,{price: 0}).price / arr.length );
console.log( arr2.reduce((a, b) => (a.price+=b.price, a),{price: 0}).price / arr2.length ); // 55
console.log( arr3.reduce((a, b) => (a.price+= b.price, a),{price: 0}).price / arr3.length );
console.log( arr4.reduce((a, b) => (a.price+= b.price, a),{price: 0}).price / arr4.length );

К вопросу почему работает только на случае 2. Потому что нужно понять как правильно работает редюс когда в методе задано начальное значение, когда не задано.

arr2.reduce((a, b) => (a.price + b.price)) / arr2.length );

a = array[0]; b = array[1];

let arr = [{price: 10}];
let arr2 = [{price: 10}, {price: 100}];

console.log( arr.reduce((a, b) => (a.price + b.price)).price / arr.length );
console.log( arr2.reduce((a, b) => (a.price + b.price)) / arr2.length ); // 55

→ Ссылка