这个 Lodash uniqBy 调用的 Ramda 等价物是什么?

What is the Ramda equivalent of this Lodash uniqBy call?

const data = [
{id: "001", failedReason: [1000]},
{id: "001", failedReason: [1001]},
{id: "001", failedReason: [1002]},
{id: "001", failedReason: [1000]},
{id: "001", failedReason: [1000, 1003]},
{id: "002", failedReason: [1000]}
];

给定这个数据集,如果我想 return 一个具有唯一 id 值的对象数组,那么我可以使用 Lodash 简单地调用: _.uniqBy(data, 'id')

我知道使用这种方法只会保留第一次出现的 element/match。

以上会 return:

[ { id: '001', failedReason: [ 1000 ] },
  { id: '002', failedReason: [ 1000 ] } ]

我是 Ramda 的新手。与此等效的 Ramda oneliner 是什么?

R.uniqBy(???, data)

只是return每个元素的id:

const data = [
{id: "001", failedReason: [1000]},
{id: "001", failedReason: [1001]},
{id: "001", failedReason: [1002]},
{id: "001", failedReason: [1000]},
{id: "001", failedReason: [1000, 1003]},
{id: "002", failedReason: [1000]}
];
const res = R.uniqBy(({ id }) => id, data);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

您也可以使用 Ramda prop 函数:

const data = [
{id: "001", failedReason: [1000]},
{id: "001", failedReason: [1001]},
{id: "001", failedReason: [1002]},
{id: "001", failedReason: [1000]},
{id: "001", failedReason: [1000, 1003]},
{id: "002", failedReason: [1000]}
];
const res = R.uniqBy(R.prop("id"), data);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

Ramda 不采用 lodash 风格,即允许字符串作为函数的替代项来获取对象的命名 属性。所以只要传递一个函数:

const data = [
  {id: "001", failedReason: [1000]},
  {id: "001", failedReason: [1001]},
  {id: "001", failedReason: [1002]},
  {id: "001", failedReason: [1000]},
  {id: "001", failedReason: [1000, 1003]},
  {id: "002", failedReason: [1000]}
];

console.log(uniqBy(prop('id'), data))
<script src="https://bundle.run/ramda@0.26.1"></script><script>
const {uniqBy, prop} = ramda    </script>