如何通过使用 Ramda 将谓词映射到输入数组来获得两个数组
How to get two arrays by mapping a predicate over an input array with Ramda
有没有一种简洁的方法可以达到与下面相同的结果但是:
- 无突变
- 不重复输入数组一次以上
- 使用 Ramda(最好)
我考虑过使用 reduce 来更新包含 passed/failed 数组的累加器对象,但我不确定是否有 smarter/less 详细选项
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]
您可以使用 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>
有没有一种简洁的方法可以达到与下面相同的结果但是:
- 无突变
- 不重复输入数组一次以上
- 使用 Ramda(最好)
我考虑过使用 reduce 来更新包含 passed/failed 数组的累加器对象,但我不确定是否有 smarter/less 详细选项
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]
您可以使用 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>