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/

相关文章:

reactjs - 使用react和jest测试文本输入

scala - 实现scala中function的实现

javascript - 如何从javascript中的对象属性创建数组

javascript - 为什么无法访问分配 jquery 对象的函数内部变量

javascript - 奇怪的CSS位置问题

javascript - 在浏览器控制台中导入或需要任何库

javascript - 为什么三元运算符中的这个逗号会在 JavaScript 中引发语法错误?

javascript - 如何根据 React、ES6 中的对象数组的搜索输入来过滤数据

scala - 在Scala中调用通用函数时出错

java - 为什么下面的程序打印不同数组的对象?