Что такое Ramda-эквивалент этого вызова Lodash uniqBy? - PullRequest
0 голосов
/ 09 мая 2019
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]}
];

Учитывая этот набор данных, если бы я хотел вернуть массив объектов только с уникальными id значениями, тогда я мог бы использовать Lodash для простого вызова: _.uniqBy(data, 'id')

Я знаю, что с этим методомсохраняется только первое вхождение элемента / совпадения.

Вышесказанное вернет:

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

Я новичок в Ramda.Что эквивалентно одной строчке Ramda?

R.uniqBy(???, data)

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Рамда не использует стиль 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>
1 голос
/ 09 мая 2019

Просто верните 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>
...