ramda /函数式编程-基于条件的不同逻辑

问题描述 投票:1回答:1

我是函数编程的新手,我想遍历一个集合并根据条件找到一个元素。条件如下,但是我想知道是否有一种更优雅的方法来以功能方式编写它(下面使用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个回答
3
投票

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()使用香草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);
© www.soinside.com 2019 - 2024. All rights reserved.