首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以一种功能的、协变的方式使用Array.prototype.map

问以一种功能的、协变的方式使用Array.prototype.map
EN

Stack Overflow用户
提问于 2019-01-05 23:14:14
回答 2查看 65关注 0票数 3

假设我有以下输入(与Node一起使用,但问题更普遍,与节点无关):

  • 指向目录的绝对路径,称为dirPathAbs
  • 存在于该文件夹中的一些JS文件的一个basename数组(称为namesSeq)

例如:

我可能有namesSeq = ['a', 'b', 'c'],它对应于a.js,b.js,c.js在dirPathAbs里面。

问题:

我如何解析文件的路径,以纯函数方式,也以协变方式?(也就是说,不必谈论迭代数组的变量。协变可能不是这个词的意思,对不起)。

我不想要的:

代码语言:javascript
复制
namesSeq.map(base => path.join(dirPathAbs, `${base}.js`));

Nor

代码语言:javascript
复制
namesSeq.map(base => require.resolve(path.join(dirPathAbs, base)));  

Nor

代码语言:javascript
复制
namesSeq.map(base => path.resolve.bind(dirPathAbs)(base));

Nor

代码语言:javascript
复制
const cb = base => path.resolve.bind(dirPathAbs)(base);
namesSeq.map(cb);

我还以为这个能起作用

代码语言:javascript
复制
namesSeq.map(path.resolve.bind(dirPathAbs))

但是没有。我认为path.resolve.bind(dirPathAbs)接收输入namesSeq,这是提供给Array.prototype.map的回调的第三个参数,因为我看到的错误是

代码语言:javascript
复制
TypeError: Path must be a string. Received [ 'a', 'b', 'c' ]

这只是一种让我感到沮丧的运动,但是自从学习JS以来,一系列类似的练习让我头疼。谈到this如何绑定,以及应该如何使用这些Function.prototype、Array.prototype和朋友,我仍然缺少一些东西。

EN

回答 2

Stack Overflow用户

发布于 2019-01-05 23:24:27

您可以在中间添加另一个函数来消耗这些额外的变量:

代码语言:javascript
复制
 const take = (fn, n) => (...args) => fn(...args.slice(0, n));
 const bind = fn => (...args) => (...args2) => fn(...args, ...args2);

 namesSeq.map(take(bind(path.resolve)(dirPathAbs), 1));

但我没有看到任何关于命名参数的进展。

票数 1
EN

Stack Overflow用户

发布于 2019-01-06 00:15:37

我认为可能有一个关于namesSeq的假设,这在一定程度上是错误的。这里有一个非常简单的例子,它或多或少地跟随着你正在做的事情。当您运行代码段时,您可以看到它按预期工作:

​

代码语言:javascript
复制
function mockResolve(input) {
  console.log(input)
  return input * 2;
}

var scopeObject = {
  sequence: [1, 2, 3]
};

var accessSequence = scopeObject.sequence;
var mapping = accessSequence.map(mockResolve.bind(scopeObject));
console.log(mapping);

​

namesSeq仅仅是一个包含这些文件字符串的数组吗?在不确定的情况下,我猜测它可能是一个包含文件名字符串数组的数组,因此,当它期望一个字符串时,就会出现字符串数组的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54057185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档