【发布时间】:2019-06-01 02:27:31
【问题描述】:
假设我有以下输入(与
Node一起使用,但问题更普遍,与节点无关):
- 目录的绝对路径,叫它
dirPathAbs- 该文件夹中存在的一些 JS 文件的基本名称数组(称为
namesSeq)
例如:
我可能有namesSeq = ['a', 'b', 'c'],它对应于dirPathAbs内的一些a.js、b.js、c.js。
问题:
如何以纯函数方式以及协变方式解析文件的路径? (即不必谈论迭代数组的变量。协变可能不是这个词,抱歉)。
我不想要的:
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 和朋友应该如何使用时,我仍然缺少一些东西。
【问题讨论】:
-
你为什么不想要这些解决方案?
-
快速回答是“为了练习”,但我还有另一个原因。我会在几个小时内尝试清楚地制定它。
标签: javascript node.js ecmascript-6 prototype-programming array.prototype.map