Как подсчитать среднюю цену в каждом массиве объектов?
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