javascript - 使用 Ramda 将两个数组与两个不同的键组合在一起

标签 javascript arrays ramda.js

我是 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}
];

我查看了文档,whereintersectionmerge 似乎是可以使用的。但是 intersectionmerge 需要相同的键。 where 似乎是门票,但我仍然不确定如何告诉它我希望两个不同的键具有相同的值。

所以我认为我可以使用 forEachfindequals 中的一个或多个来镜像 POJS 方式。这是我的想法(到目前为止没有 intersectionwhere 用法):

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/

相关文章:

javascript - 我需要隐藏/删除网址中的路径

javascript - 缓存 JavaScript promise 结果

javascript - 函数虽然有值但返回未定义

c - 赋值 c 中的不兼容类型

javascript - 将对象从数组 A 移动到数组 B. Ramda.js

javascript - ramda 数组清理数据以生成唯一的数组

javascript - SharePoint 2013 列表新表单不反射(reflect)修改后的更改

javascript - 我想给每个数组元素一个数字

arrays - 循环遍历哈希中包含的数组

javascript - ramda源码中@@functional/placeholder是什么意思?