【发布时间】:2019-09-05 09:45:18
【问题描述】:
我在下面写了这个函数,它通过产品类型和货币类型转换传递的产品数组
function getProductsByCurrency(products, type, exchangeRate = 1) {
var productsRetrieved = products.map(item => ({id: item.id,
name: item.name,
price: (item.price * exchangeRate).toFixed(2),
type: type}));
return productsRetrieved;
}
是否可以将功能分解为更具体?或以更好的方式设计它? 例如,通过将其命名为 getProductsByCurrency 它看起来不正确,因为如果我以默认汇率使用它,我可以传递书籍数组来检索具有“书籍”类型的产品,而与汇率无关。 或许有办法使用偏函数(FP)?
编辑: 为我想要实现的目标添加更多上下文。
假设我有三类产品(手机、化妆品、书籍) 来自三个资源。我需要创建三个不同货币的所有产品的合并数组(productsinUSD、productsinAUD、productsinPounds)
也使用下面的函数来合并数组
function concatProducts(arr) {
return [].concat.apply([], arr);
}
所以我调用 getProductsByCurrency 三次以按产品类型和货币(汇率)转换它们,并将这些值作为数组传递以将它们连接起来以实现 productsinUSD。并重复以获取以澳元为单位的产品,以英镑为单位的产品。
类型也是字符串值(例如:'mobiles')
【问题讨论】:
-
不清楚(至少对我来说)你在问什么..
-
您能否添加 2 个不同的示例来说明您希望如何使用该功能以及各自的结果?
-
不清楚您是否希望该功能适用于更广泛的产品或特定产品。 (更抽象或更不抽象)
-
添加了更多上下文,希望现在清楚。
-
您应该始终编写尽可能简单且需要尽可能少上下文的函数。您的
getProductsByCurrency需要Array的产品,但它应该只需要一个产品。在函数之外进行映射。
标签: javascript arrays functional-programming reusability partial-application