我在下面编写了此函数,该函数按产品类型和货币类型转换传递的产品数组
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,它看起来不正确,因为如果我以默认汇率使用它,则可以传递books数组来检索类型为与汇率无关的“ books”类型的产品。也许有一种方法可以使用部分函数(FP)?
编辑:添加更多上下文到我想要实现。
可以说,我来自三种资源的三类产品(电话,化妆品,书籍)。我需要按不同货币创建所有产品的三个合并数组(productsUSD,productsAUD,productsPounds)
还使用下面的函数来合并数组
function concatProducts(arr) {
return [].concat.apply([], arr);
}
因此,我要三遍调用getProductsByCurrency,以按产品类型和货币(汇率)对它们进行转换,然后将这些值作为数组传递,以使它们联系起来,以实现USD产品。并重复获取产品inAUD,产品inPounds。
类型也是字符串值(例如:“ mobiles”)
首先,您发布的功能并没有真正的问题。我会做一些不同的事情,但我不会假装这不会使头发有些裂开。
const processItem = (type, exchangeRate = 1) => ({
id,
price,
name,
}) => ({
id,
name,
type,
price: (price * exchangeRate).toFixed(2),
});
我们有一个函数,该函数带有一个类型和一个可选的exchangeRate,并返回一个将单个项目转换为所需形式的函数。这就是鲍勃在评论中所说的。我还在项目上使用对象结构分解,并在结果上使用了属性简写,以使代码更简洁。现在我们可以将其映射到各种类别的东西上:
const results = [
...mobilePhones.map(processItem('phone')),
...cosmetics.map(processItem('cosmetics')),
...books.map(processItem('book')),
];
如果您出于其他目的需要临时结果,只需将它们填充到vars中即可,但是为了简单起见,我将它们直接分散到结果数组中。
尽管比您为代码质量帽子戏法发布的内容更短,更清晰,更灵活,但我想重申一下,我看到的方式比您发布的功能还差。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句