JSFiddle - React, Tailwind, and code Playground

by Adam Boduch

HTML

<script src="https://rawgit.com/lodash/lodash/master/dist/lodash.min.js"></script>

JavaScript

var arr = [
  {type:'a', name:'a1'}, {type:'b', name:'b1'}, {type:'hr'}, 
  {type:'a', name:'a2'}, {type:'b', name:'b2'}, {type:'hr'}, 
  {type:'a', name:'a3'}, {type:'b', name:'b2'}, {type:'hr'} 
];

function splitBy(array, predicate, result = []) {
  const taken = _.takeWhile(array, predicate);
  const remaining = _.tail(_.dropWhile(array, predicate));
  
  return remaining.length ?
  	splitBy(remaining, predicate, result.concat([taken])) :
    result.concat([taken]);
}

console.log(splitBy(arr, _.negate(_.partial(_.isEqual, { type: 'hr' }))));