Javascript重构,可以使用map & filter

原文 标签 javascript ecmascript-6 functional-programming

这是函数中的返回,我想在数组中应用 40% 的折扣,以防产品颜色为红色。这是返回,它正在工作。
我想知道一种重构它的方法,我也想知道在这种情况下是否可以链接过滤器功能,如果可能的话应该怎么做?
另外,如果您可以使用更好的纯函数来做到这一点,我将不胜感激,我正在学习函数式编程。

return cart.map( (x) => {
  if (x.color === "red") {
    x.price = x.price * 0.4;
  }
   return x;
 });

谢谢

最佳答案

如果您想减少 if 语句的数量并重用 isRed,则当前代码通常是可以的过滤器和 discount函数,那么您可以将其更改为类似于:

const cart = [{price: 3, color: 'red'}, {price: 3, color: 'blue'}];

const applyIf = (condition, fn) => {
    return x => condition(x) ? fn(x) : x;
}

const isRed = x => x.color === 'red';

const discount = x => ({ ...x, price: x.price * 0.4 });

cart.map(applyIf(isRed, discount))

关于Javascript重构,可以使用map & filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56934222/

相关文章:

javascript - React Native + Icons : Warning: Failed prop type: Invalid props. 样式键 tintColor 提供给 ForwardRef(Text)

javascript - 如何比较 Javascript 中的字符串和符号?

javascript - 将 JavaScript ES6 函数转换为 ES3

functional-programming - Okasaki 的 Purely Functional Data Structure 中的 Streams 章节

haskell - 使用 foldr 实现 zip

javascript - JS如何检查对象是否具有接口(interface)中不包含的属性?

VB Razor 中 <script> 元素中的 Javascript 代码

javascript - Webpack 和外部库 : ProvidePlugin vs entry vs global import?

javascript - 如何绑定(bind) 'this'点击监听并使用事件-es6

javascript - 在使用 .bind() 进行函数柯里化(Currying)时,this 变量的作用是什么?