Files
30-seconds-of-code/snippets/js/s/partition-array.md
Angelos Chalaris 9d032ce05e Rename js snippets
2023-05-19 20:23:47 +03:00

965 B

title, type, language, tags, cover, dateModified
title type language tags cover dateModified
Partition array snippet javascript
array
object
people-on-beach 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 from fn.
  • Use 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]]