964 B
964 B
title, tags, cover, firstSeen, lastUpdated
| title | tags | cover | firstSeen | lastUpdated |
|---|---|---|---|---|
| Partition array | array,object | people-on-beach | 2020-05-20T17:48:13+03:00 | 2020-10-22T20:24:04+03:00 |
Applies fn to each value in arr, splitting it each time the provided function returns a new value.
- Use
Array.prototype.reduce()with an accumulator object that will hold the resulting array and the last value returned fromfn. - Use
Array.prototype.push()to add each value inarrto the appropriate partition in the accumulator array.
const partitionBy = (arr, fn) =>
arr.reduce(
({ res, last }, v, i, a) => {
const next = fn(v, i, a);
if (next !== last) res.push([v]);
else res[res.length - 1].push(v);
return { res, last: next };
},
{ res: [] }
).res;
const numbers = [1, 1, 3, 3, 4, 5, 5, 5];
partitionBy(numbers, n => n % 2 === 0); // [[1, 1, 3, 3], [4], [5, 5, 5]]
partitionBy(numbers, n => n); // [[1, 1], [3, 3], [4], [5, 5, 5]]