insertBetween.js

/**
 * Insert a separator as element into an array.
 * @alias array.insertBetween
 * @param {Array} arr
 * @param {*} separator
 * @returns {Array} The newly inserted array
 */
const insertSep = (lastIndex, separator) => (e, i) => i < lastIndex ? [e, separator] : [e];
const insertSepFunctor = (lastIndex, separator) => (e, i) => i < lastIndex ? [e, separator(i)] : [e];

const insertBetween = (arr, separator) =>
    (typeof separator === 'function'
        ? arr.map(insertSepFunctor(arr.length - 1, separator))
        : arr.map(insertSep(arr.length - 1, separator))
    ).reduce((a, b) => [...a, b], []);

export default insertBetween;