如何通过使用 Ramda 在输入数组上映射谓词来获取两个数组

cpo*_*ver 2 javascript arrays functional-programming ramda.js

是否有一种简洁的方法可以实现与以下相同的结果,但是:

  • 没有突变
  • 无需多次迭代输入数组
  • 使用 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]
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 5

您可以使用R.partition

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

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

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