【问题标题】:ramda/functional programming - different logic based on conditionramda/函数式编程 - 基于条件的不同逻辑
【发布时间】:2020-08-16 14:30:47
【问题描述】:

我是函数式编程的新手,我想浏览一个集合并根据条件找到一个元素。条件如下,但我想知道是否有更优雅的方式以函数方式编写它(下面使用 Ramda):

import * as R from "ramda";

const data = [{x: 0, y: 0} , {x: 1, y: 0}];

//return the cell which matches the coord on the given orientation
function findCell(orientation, coord) {

  const search = R.find(cell => {
    if (orientation === "x") {
      return cell.x === coord;
    } else {
      return cell.y === coord;
    }
  });

  return search(data);
}

findCell("x", 0);

有没有更优雅的方式在 Ramda 或其他一些函数式 JS 库中编写这个谓词?

【问题讨论】:

    标签: javascript functional-programming ramda.js


    【解决方案1】:

    R.propEq 是您正在寻找的合适谓词(按属性值查找)。使用 R.pipe 创建一个接受属性和值的函数,将它们传递给 R.propEq,并返回一个带有谓词的 R.find 函数。

    const { pipe, propEq, find } = R;
    
    const findCell = pipe(propEq, find);
    
    const data = [{x: 0, y: 0} , {x: 1, y: 0}];
    
    const result = findCell('x', 0)(data);
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>

    您可以使用 Array.find() 对 vanilla JS 做同样的事情:

    const findCell = (prop, value, arr) => arr.find(o => o[prop] === value)
    
    const data = [{x: 0, y: 0} , {x: 1, y: 0}];
    
    const result = findCell('x', 0, data);
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      相关资源
      最近更新 更多