javascript - 使用 ...rest ES6 以奇怪的顺序放置参数

标签 javascript node.js ecmascript-6

在 nodeJS 中我写:

path = 'public/MIN-1234';
path = path.split('/');
return path.join( process.cwd(), ...path);

我希望:

  c:\CODE\public/MIN-1234

但是得到了:

 `‌publicC:\CODEMIN-1234`

什么??

最佳答案

您问题下的评论为您做错的事情提供了一些有值(value)的指导。具体来说,您似乎认为您正在使用 Node 的 path.join (其中 path 是 Node 模块,path.join 是有效的模块方法)而实际上您已经覆盖了 path使用您的路径添加字符串,然后将该字符串转换为一个数组,该数组误导性地也有一个 join具有完全不同功能的方法。

但是,您尝试使用 ECMAScript 2015(有时缩写为 ES6 但从不缩写为 EC6)休息传播语法与 Node 的 path.join 似乎还有一个进一步的问题。方法。

如果您之前有正当理由在其分隔符处拆分路径添加,则可以使用 ES6 rest spread 将这些元素添加到路径中:

function something() {
  const path = require('path');
  const myPathAddition = 'public/MIN-1234';
  const myPathAdditionElmts = myPathAddition.split('/'); // if you really need to do this anyway
  return path.join(process.cwd(), ...myPathAdditionElmts);
}

但是,如果您没有其他理由拆分您的路径添加,那么不要为了立即重新加入 path.join 中的结果段而拆分它。称呼。相反,您可以只连接“未拆分”的原始字符串,而无需使用扩展语法:

function something() {
  const path = require('path');
  const myPathAddition = 'public/MIN-1234'; // don't bother splitting this
  return path.join(process.cwd(), myPathAddition); // just join it as is
}

注意:此解决方案在我的 Mac 终端上运行良好。如果您在 Windows 机器上执行此操作并且确实需要按照您在问题中建议的那样在路径段中同时使用反斜杠和正斜杠,那么您可能想要或需要做比我展示的更多的解析确保有效/一致/清晰的路径语法。然而,我已经展示了关于需要或缺乏使用 path.join 的扩展语法的一般概念。仍然有效。

关于javascript - 使用 ...rest ES6 以奇怪的顺序放置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43181855/

相关文章:

php - 在 Jquery 中设置 Codeigniter session

javascript - 如何使用 Jest 测试输出随机的函数?

java - 从 Flex 小部件访问 GWT 功能

node.js - 如何使用 Jest 模拟异步函数延迟时间

javascript - 如何顺序处理websocket消息

javascript - 镜像功能做相反的事情

c++ - 在 ubuntu 上安装 npm 期间,使用 C++ 17 编译 native Node 插件失败

javascript - NodeJS Express 自定义验证器如何在单独的文件中进行 require

Javascript/ typescript : what's the difference between exporting single functions or a const class?

node.js - 如何编写可由 NodeJS 和 Aurelia 使用的 ES6 类\模块