Вот решение, которое поможет вам изучить, как использовать Array.reduce
. Это может быть не самым эффективным, но отсюда вы можете разработать собственное решение. Чтобы сделать это более эффективным, вам следует продолжить работу с концепцией, чтобы получить необходимые вам результаты с точки зрения времени обработки или сложности.
Пример Repl
cheapestStoreForRecipe
принимает два аргумента: recipe
и storeCollection
. Метод возвращает список магазинов с накладными для рецепта, который включает стоимость каждого товара и общую стоимость.
Во-первых, storeCollection
перебирает все хранилища в коллекции. Во-вторых, для каждого магазина пункты рецепта повторяются. При наличии предмета рецепта, который соответствует предмету магазина, рассчитываются значения quantity
, unit
и total
для предмета; Затем рассчитывается общая стоимость каждого рецепта.
function cheapestStoreForRecipe(recipe, storeCollection){
return Object.entries(storeCollection)
.reduce((_storeCollection, [storeName, storeInventory]) => {
let storeInvoice = Object.entries(recipe)
.reduce((_recipe, [itemName, itemQuantity]) => {
let storeInventoryItem = storeInventory[itemName]
if(storeInventoryItem) {
_recipe.invoice[itemName] = {
quantity: itemQuantity,
unit: storeInventoryItem,
total: itemQuantity * storeInventoryItem,
}
_recipe.total += _recipe.invoice[itemName].total
}
return _recipe
}, {
invoice: {},
total: 0,
})
_storeCollection[storeName] = storeInvoice
return _storeCollection
}, {
Brutto: {},
Edoka: {},
Were: {},
})
}
{
"Brutto": {
"invoice": {
"potato": {
"quantity": 3,
"unit": 3,
"total": 9
},
"onion": {
"quantity": 1,
"unit": 5,
"total": 5
},
"corn": {
"quantity": 5,
"unit": 2,
"total": 10
}
},
"total": 24
},
"Edoka": {
"invoice": {
"potato": {
"quantity": 3,
"unit": 5,
"total": 15
},
"onion": {
"quantity": 1,
"unit": 4,
"total": 4
},
"corn": {
"quantity": 5,
"unit": 3,
"total": 15
}
},
"total": 34
},
"Were": {
"invoice": {
"potato": {
"quantity": 3,
"unit": 3,
"total": 9
},
"onion": {
"quantity": 1,
"unit": 5,
"total": 5
},
"corn": {
"quantity": 5,
"unit": 2,
"total": 10
}
},
"total": 24
}
}