Не могу вычислить сумму полей объекта , в массиве
const items = [{ price: 150 }, { price: 150 }, { price: 100 }, { price: 100 }];
let result = items.map(({ price }) => price);
const calculateTotal = result.reduce((total, amount, index, array) => {
let summ = 0;
return (summ += amount);
}, 0);
console.log(calculateTotal);
Почему код не верный, предпологаю что на каждой итерации, summ прибавляется, как исправить и посчитать сумму всех price ?
Ответы (3 шт):
const items = [{ price: 150 }, { price: 150 }, { price: 100 }, { price: 100 }];
let result = items.map(({ price }) => price);
const calculateTotal = result.reduce((total, amount, index, array) => {
return (total += amount);
}, 0);
console.log(calculateTotal);
Можно сразу с объектом работать
const items = [{ price: 150 }, { price: 150 }, { price: 100 }, { price: 100 }];
const calculateTotal = items.reduce((total, item) => total += item.price, 0);
console.log(calculateTotal);
не используется total - результат с прошлого шага. Вместо этого каждый раз создается summ=0 к которому прибавляется amount. Таким образом каждый раз вычисляется amount а не общая сумма.
Вместо этого нужно использовать total
const items = [{
price: 150
}, {
price: 150
}, {
price: 100
}, {
price: 100
}];
let result = items.map(({
price
}) => price);
const calculateTotal = result.reduce((total, amount, index, array) => {
return total + amount;
}, 0);
console.log(calculateTotal);
const calculateTotal = result.reduce((total, amount, index, array) => {
let summ = 0;
return (summ += amount);
}, 0);
Тут вы никак не задействуете переменную total.
Можно переделать функцию в вашем цикле reduce вот так:
const items = [{ price: 150 }, { price: 150 }, { price: 100 }, { price: 100 }];
let result = items.map(({ price }) => price);
const calculateTotal = result.reduce((total, amount, index, array) => {
total += amount
return total;
}, 0);
Теперь всё работает.
Если вам интересно как можно улучшить этот код в принципе:
Операция в функции-теле цикла настолько примитивна, что можно записать её в одну строку:
const items = [{ price: 150 }, { price: 150 }, { price: 100 }, { price: 100 }];
let result = items.map(({ price }) => price);
const calculateTotal = result.reduce((total, amount, index, array) => {
return total + amount;
}, 0);
Далее можно убрать лишние символы, которые затрудняют работу с кодом:
const items = [{ price: 150 }, { price: 150 }, { price: 100 }, { price: 100 }];
let result = items.map(({ price }) => price);
const calculateTotal = result.reduce((total, amount) => total + amount, 0);
Потом можно убрать лишний проход циклом по массиву:
const items = [{ price: 150 }, { price: 150 }, { price: 100 }, { price: 100 }];
const calculateTotal = items
.reduce((total, amount) => total + amount.price, 0);