import { forEach, findIndex } from "./"; import { curry } from ".."; /** * Returns the union of two lists. * Comparisson is done with the `equalsFn`, * which is given two elements and must return true if they are considered equal. * * @see union * @param {function} equalsFn * @param {any[]} list1 * @param {any[]} list2 * @returns {any[]} */ const unionWith = (equalsFn, list1, list2) => { const result = []; const appendItems = forEach((el) => { const index = findIndex((resEl) => equalsFn(resEl, el), result); if (index === -1) { result.push(el); } }); appendItems(list1); appendItems(list2); return result; }; export default curry(unionWith);