Показать сообщение отдельно
  #3 (permalink)  
Старый 23.11.2017, 10:48
Интересующийся
Отправить личное сообщение для jerseybb Посмотреть профиль Найти все сообщения от jerseybb
 
Регистрация: 17.11.2017
Сообщений: 10

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)

Последний раз редактировалось jerseybb, 23.11.2017 в 11:12.
Ответить с цитированием