33 lines
821 B
Markdown
33 lines
821 B
Markdown
---
|
|
title: partition
|
|
tags: array,object,intermediate
|
|
---
|
|
|
|
Groups the elements into two arrays, depending on the provided function's truthiness for each element.
|
|
|
|
- Use `Array.prototype.reduce()` to create an array of two arrays.
|
|
- Use `Array.prototype.push()` to add elements for which `fn` returns `true` to the first array and elements for which `fn` returns `false` to the second one.
|
|
|
|
```js
|
|
const partition = (arr, fn) =>
|
|
arr.reduce(
|
|
(acc, val, i, arr) => {
|
|
acc[fn(val, i, arr) ? 0 : 1].push(val);
|
|
return acc;
|
|
},
|
|
[[], []]
|
|
);
|
|
```
|
|
|
|
```js
|
|
const users = [
|
|
{ user: 'barney', age: 36, active: false },
|
|
{ user: 'fred', age: 40, active: true },
|
|
];
|
|
partition(users, o => o.active);
|
|
// [
|
|
// [{ user: 'fred', age: 40, active: true }],
|
|
// [{ user: 'barney', age: 36, active: false }]
|
|
// ]
|
|
```
|