перемножить значения ключей объектов

151
15 апреля 2019, 17:50

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
Answer 1

Нужно перемножить одниковые значения ключей этих объектов, необходимо использовать 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

Answer 2

Так как нужно найти сумму для 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

Answer 3

Еще вариант

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);
    }
READ ALSO
Не работает скрипт для jquery Waypoints

Не работает скрипт для jquery Waypoints

Есть не большой скрипт для плагина jquery waypoints, код:

141
browser-sync, не перезагружается страница

browser-sync, не перезагружается страница

При изменении файла HTML не происходит перезагрузка страницы, хотя в командной строке пишет якобы страница перезагрузилась, в чем дело?

152