products - объект со свойствами "имя продукта":"цена за единицу" order - объект со свойствами "имя продукта":"количество единиц". Нужно перемножить одниковые значения ключей этих объектов, необходимо использовать reduce
const products = {
bread: 10,
milk: 15,
apples: 20,
cheese: 30,
chicken: 40
};
const orderA = {
bread: 2,
apples: 4,
chicken: 1
};
const orderB = {
bread: 1,
milk: 2,
cheese: 3
};
// Вызовы функции для проверки
console.log(getTotalPrice(products, orderA)); // 140
console.log(getTotalPrice(products, orderB)); // 130
Нужно перемножить одниковые значения ключей этих объектов, необходимо использовать reduce
если нужно - дак премножьте. необходимо - используйте.
const products = {
bread: 10,
milk: 15,
apples: 20,
cheese: 30,
chicken: 40
};
const orderA = {
bread: 2,
apples: 4,
chicken: 1
};
const orderB = {
bread: 1,
milk: 2,
cheese: 3
};
getTotalPrice = function(p, o){
return Object.keys(p).reduce(function(acc, pkey){
return o.hasOwnProperty(pkey) ? acc + p[pkey] * o[pkey] : acc;
}, 0);
}
// Вызовы функции для проверки
console.log(getTotalPrice(products, orderA)); // 140
console.log(getTotalPrice(products, orderB)); // 130
Так как нужно найти сумму для order*, достаточно взять его поля и значения, и сворачивая полученный массив умножать значение, на значение соответствующего поля из products.
Для получения списка массивов (поле, значение), можно воспользоваться функцией Object.entries
Далее полученный массив можно свернуть воспользовавшись функцией reduce
В итоге может получиться следующий код:
const products = {
bread: 10,
milk: 15,
apples: 20,
cheese: 30,
chicken: 40
};
const orderA = {
bread: 2,
apples: 4,
chicken: 1
};
const orderB = {
bread: 1,
milk: 2,
cheese: 3
};
getTotalPrice = function(products, order) {
return Object.entries(order).reduce((acc, [product, count]) => acc + products[product] * count, 0);
}
// Вызовы функции для проверки
console.log(getTotalPrice(products, orderA)); // 140
console.log(getTotalPrice(products, orderB)); // 130
Еще вариант
function getTotalPrice(products, orderA) {
return [products, orderA].reduce(function (previous, current) {
if (!previous) {
return current;
} else {
var sum = 0;
for (var key in current) {
if (previous[key]) {
sum += current[key] * previous[key];
}
}
return sum;
}
}, null);
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники