splitWhenever.js 903 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import _curryN from "./internal/_curryN.js";
  2. /**
  3. * Splits an array into slices on every occurrence of a value.
  4. *
  5. * @func
  6. * @memberOf R
  7. * @since v0.26.1
  8. * @category List
  9. * @sig (a -> Boolean) -> [a] -> [[a]]
  10. * @param {Function} pred The predicate that determines where the array is split.
  11. * @param {Array} list The array to be split.
  12. * @return {Array}
  13. * @example
  14. *
  15. * R.splitWhenever(R.equals(2), [1, 2, 3, 2, 4, 5, 2, 6, 7]); //=> [[1], [3], [4, 5], [6, 7]]
  16. */
  17. var splitWhenever =
  18. /*#__PURE__*/
  19. _curryN(2, [], function splitWhenever(pred, list) {
  20. var acc = [];
  21. var curr = [];
  22. for (var i = 0; i < list.length; i = i + 1) {
  23. if (!pred(list[i])) {
  24. curr.push(list[i]);
  25. }
  26. if ((i < list.length - 1 && pred(list[i + 1]) || i === list.length - 1) && curr.length > 0) {
  27. acc.push(curr);
  28. curr = [];
  29. }
  30. }
  31. return acc;
  32. });
  33. export default splitWhenever;