function partialAny(fn, ...args) {
return (...args2) => {
return fn(...args.map(arg => arg === undefined ? args2.shift() : arg), ...args2)
}
}
Принцип, если непонятен синтаксис:
1. Проходимся по массиву аргументов функции partialAny и возвращаем новый массив (Array.map)
2. Сравниваем каждый элемент с undefined
3. Если true, заменяем первым элементом из массива аргументов возвращаемой функции (с удалением, Array.shift)
4. Вызываем переданную функцию fn с аргументами из получившегося массива (пункт 1) аргументов, добавляем в конец оставшиеся аргументы из массива аргументов возвращаемой функции (... - оператор spread)