我仍然在使用ramda并在基础方面苦苦挣扎。
我想找到第一个设置了许多属性的对象。因此,我尝试使用带有or的查找,但是无论我如何构造它,我似乎都无法使其正常工作。 repl.it
var xs = [{a: 1}, {b: 2}, {a: 3}];
R.find(R.or(R.prop('c'), R.prop('b')))(xs);
我期望它的计算结果为{b:2},但它始终返回未定义的值。我在这里做什么错了?
答案 0 :(得分:2)
在这种情况下,您需要使用两个布尔生成函数的R.either
,而R.or
只希望比较两个布尔值(有效的(a, b) => a || b
的咖喱形式)。
答案 1 :(得分:1)
我不会使用prop
来测试对象是否具有属性,因为如果将属性设置为伪造的值,它将返回false负数。 (改为使用has
。)此外,如果您有两个以上的条件,则可能要考虑使用anyPass
而不是either
。
const findObject =
R.find(R.__, [
{a: 0},
{b: 1},
{c: 1}]);
// probably not the result you expected
findObject(
R.anyPass([
R.prop('a'),
R.prop('b')])); //=> {b: 1}
// most likely the result you expected
findObject(
R.anyPass([
R.has('a'),
R.has('b')])); //=> {a: 0}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>