【发布时间】:2016-06-03 01:39:26
【问题描述】:
我是 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 方法。
【问题讨论】:
-
答案很大程度上取决于每次是否有匹配且没有间隙。如果是这样,请使用 sort 和 zip/reduce。
-
@Nick,我可以建议一个可行的原生 javascript 解决方案
-
@JaredSmith 每次都会有一个匹配,并且没有重复/冲突的键。
-
@Nick 看看我更新的答案。使用 Ramda,它是一条线。
标签: javascript arrays ramda.js