zipAndFlat.js

/**
 * One-by-one merge two arrays into one
 * 10x faster than lodash flatten and zip
 * @alias array.zipAndFlat
 * @param {Array} arr1
 * @param {Array} arr2
 * @returns {Array}
 */
function zipAndFlat(arr1, arr2) {
    let long,
        result = [],
        ll,
        ls;
    const l1 = arr1 == null ? 0 : arr1.length;
    const l2 = arr2 == null ? 0 : arr2.length;

    if (l2 > l1) {
        ll = l2;
        ls = l1;
        long = arr2;
    } else {
        ll = l1;
        ls = l2;
        long = arr1;
    }

    for (let i = 0; i < ls; i++) {
        result.push(arr1[i]);
        result.push(arr2[i]);
    }

    for (let i = ls; i < ll; i++) {
        result.push(long[i]);
    }

    return result;
}

export default zipAndFlat;