无点编程难题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无点编程难题相关的知识,希望对你有一定的参考价值。

我有一个用匿名函数编写的函数,该函数将使用与id属性匹配的对象列表来合并ID数组。

const objectsList = [{ id: 1, ... }, { id: 2, ... }]
ids.map(id => R.find(R.propEq('id', id), objectsList))

((我知道以这种方式查找对象很愚蠢-效率低下,等等,暂时暂时忽略它。)

所以,我想无限制地执行此操作,但我陷入困境。这是最好的尝试:

ids.map(R.find(R.propEq('id', R.__), objects))

但是那不好。我还尝试过翻转参数的顺序并使用compose,但这没有产生正确的结果:

ids.map(R.compose(R.flip(R.find)(objects), R.propEq('id')))

这也不是骰子...任何FP向导都在乎帮助那些总是想弄清楚无点编程细微差别的人吗?

答案

要获得Array.map()的无点映射回调,您需要通过使用R.pipe(或R.compose颠倒顺序)来创建谓词,以将当前id传递给R.propEq。您需要翻转R.find,以便它不能首先获取对象数组。但是,您还需要使用R.nAry将函数的偶数限制为1,因为Array.map()将3个参数传递给回调(项,索引,原始数组):

const { nAry, pipe, propEq, flip, find } = R

const objectsList = [{ id: 1 }, { id: 2 }]
const ids = [2]

const fn = nAry(1, pipe(propEq('id'), flip(find)(objectsList)))

const result = ids.map(fn)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

以上是关于无点编程难题的主要内容,如果未能解决你的问题,请参考以下文章

985大学的高材生只会写代码片段,丢人吗?

985高校的高材生只会写代码片段,丢人吗?

985大学的高材生只会写代码片段,丢人吗?

985大学的高材生只会写代码片段,丢人吗?

985大学的高材生只会写代码片段,丢人吗?

使 Haskell 函数无点