Вырви мозг) То что понял:
1) getKeyIndex: я бы сделал ее функцией, принимающей объект:
function getKeyIndex({ keys, key }) {
const keyPos = keys
.concat(key)
.sort((a, b) => a - b)
.findIndex(i => i === key)
return keys[keyPos - 1];
}
Вообще, кстати, то что она возвращает не соответствует его названию. Возвращает же предыдущий key, а вроде как должен вернуть индекс эл-та.
2) Cудя по всему getSecondProperty работает только с getKeyIndex. Зачем тогда его передавать? Заведите getKeyIndex через function.
Вообщем:
1) Поговаривают, что нехорошо писать const fn = (gn) => {}, лучше function fn(){}
2) Функция должна делать только одно и название функции должно совпадать с тем, что она делает
3) Функция должна принимать 1-2 параметра, если больше, то лучше через объект и в самой функции пользоваться деструктором.
4) Делать функцию, которая возвращает функцию, которая возвращает функцию, которая возвращает функцию т.д лучше не надо