fn
to each value in arr
, splitting it each time the provided function returns a new value.Array.prototype.reduce()
with an accumulator object that will hold the resulting array and the last value returned from fn
.Array.prototype.push()
to add each value in arr
to 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]]
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️