Как получить два массива путем сопоставления предиката с входным массивом с помощью Ramda - PullRequest
0 голосов
/ 23 ноября 2018

Существует ли краткий способ достижения того же результата, что и ниже, но:

  • без мутации
  • без итерации по входному массиву более одного раза
  • использование Ramda (желательно)

Я думал об использовании Reduce для обновления объекта-накопителя, содержащего пропущенные / ошибочные массивы, но я не уверен, что была более умная / менее подробная опция

const predicate = i => i % 2 === 0;
const predicatePassed = [];
const predicateFailed = [];

[1, 2, 3, 4].forEach(i => predicate(i) ? predicatePassed.push(i) : predicateFailed.push(i))

// predicatePassed === [2, 4]
// predicateFailed === [1, 3]

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете использовать R.partition :

const predicate = i => i % 2 === 0;

const [predicatePassed, predicateFailed] = R.partition(predicate)([1, 2, 3, 4]);

console.log(predicatePassed);
console.log(predicateFailed);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
...