JSFiddle - React, Tailwind, and code Playground
by eccentric_j
JavaScript
function defn (...fns) {
const fnMap = fns.reduce((o, fn) => {
return Object.assign(o, {
[fn.length]: fn
});
}, {});
const defaultFn = fns.find(fn => fn.default);
if (defaultFn) {
fnMap.default = defaultFn;
}
return (...args) => {
const length = args.length;
const fn = fnMap[length];
if (fn) {
return fn(...args);
}
if (fnMap.default) {
return fnMap.default(...args);
}
return;
};
}
const add = defn(
(x) => x,
(x, y) => x + y,
(x, y, z) => x + y + z,
)
function log (...args) {
document.body.innerHTML += args.map(String).join(' ') + '<br />';
}
function clear () {
document.body.innerHTML = '';
}
clear();
log(add(1));
log(add(1, 2));
log(add(1, 2, 3));
log(add(1, 2, 3, 4));