我是 Ramda 和柯里化(Currying)的新手,但想组合两个不同的数组。鉴于:
var array1 = [
{_id: 0, x: 10},
{_id: 1, x: 30}
];
var array2 = [
{UUID: 0, y: 20},
{UUID: 1, y: 60}
];
我想在 _id === UUID
处加入他们,得到这样的东西:
var result = [
{_id: 0, UUID: 0, x: 10, y: 20},
{_id: 1, UUID: 1, x: 30, y: 60}
];
我查看了文档,where
、intersection
和merge
似乎是可以使用的。但是 intersection
和 merge
需要相同的键。 where
似乎是门票,但我仍然不确定如何告诉它我希望两个不同的键具有相同的值。
所以我认为我可以使用 forEach
、find
和 equals
中的一个或多个来镜像 POJS 方式。这是我的想法(到目前为止没有 intersection
或 where
用法):
import r from 'ramda';
var result =
r.forEach(
r.find(
r.equals(
r.prop('UUID', r._),
r.prop('_id', r._)
), data, metadata);
我被困在如何检查两个数组中的单独键(UUID
和 _id
),同时保持函数符号。我相信我做的一切都是错误的,但我的想法很乱,我将首先尝试一种简单的 Javascript 方法。
最佳答案
可以使用 R.indexBy
, R.mergeWith
, 和 R.merge
:
// propMerge :: String -> String -> Array Object -> Array Object -> Array Object
var propMerge = R.curry(function(k1, k2, xs1, xs2) {
return R.values(R.mergeWith(R.merge,
R.indexBy(R.prop(k1), xs1),
R.indexBy(R.prop(k2), xs2)));
});
关于javascript - 使用 Ramda 将两个数组与两个不同的键组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597163/