Скажем, у меня есть следующий вход (для использования с Node
, но проблема носит более общий характер и не связана с узлом):
- Абсолютный путь к каталогу, назовите его
dirPathAbs
- Массив базовых имен (назовите его
namesSeq
) некоторых файлов JS, которые существуют в этой папке
Например:
У меня может быть namesSeq = ['a', 'b', 'c']
, что соответствует некоторым a.js
, b.js
, c.js
внутри dirPathAbs
.
Проблема:
Как мне разрешить пути к файлам чисто функциональным способом , но также ковариантным образом ? (т.е. без необходимости когда-либо говорить о переменной, которая повторяет массив. Ковариант может не подходить для этого, извините ).
Чего я не хочу:
namesSeq.map(base => path.join(dirPathAbs, `${base}.js`));
Нор
namesSeq.map(base => require.resolve(path.join(dirPathAbs, base)));
Нор
namesSeq.map(base => path.resolve.bind(dirPathAbs)(base));
Нор
const cb = base => path.resolve.bind(dirPathAbs)(base);
namesSeq.map(cb);
Я ожидал, что это сработает
namesSeq.map(path.resolve.bind(dirPathAbs))
но это не так. Я думаю, что path.resolve.bind(dirPathAbs)
получает в качестве ввода namesSeq
, что является третьим параметром обратного вызова, предоставленного Array.prototype.map
, потому что ошибка, которую я вижу,
TypeError: Path must be a string. Received [ 'a', 'b', 'c' ]
Это всего лишь одно из упражнений такого рода, которое меня расстраивает, но целая категория аналогичных упражнений доставила мне головную боль после изучения JS. Я все еще что-то упускаю, когда дело доходит до того, как this
связывается, и как все эти Function.prototype
, Array.prototype
и друзья должны использоваться.