使用Underscore / Lodash在JavaScript中完成一个非变异反向拖尾的最佳方法

我是我的node.js项目lodash /下划线的狂热用户,我发现自己的情况下,我需要以类似于下面的代码的方式从右到左recursion遍历数组(假设所有调用是同步的):

function makeDir(pathArray) { var unsulliedPath = clone(pathArray); var lastGuy = pathArray.pop(); var restOfEm = pathArray; if dirExists(unsulliedPath) { console.log("Your job is done!"); } else { makeDir(restOfEm); makeDir(unsulliedPath); } } 

然而,克隆和改变pathArray参数会让我感到困惑。 所以我可以这样做:

 function makeDir(pathArray) { var lastGuy = _.last(pathArray); // EITHER I could... var restOfEm = _(pathArray).reverse().tail().reverse().value(); // OR I could do... var restOfEm = _.first(pathArray, pathArray.length - 1); if dirExists(pathArray) { console.log("Your job is done!"); } else { makeDir(restOfEm); makeDir(pathArray); } } 

好吧,这需要克服传入的参数。但是,下划线的咒语稍微难看。

lodash /下划线包含一个更简单和更清晰的方法来获取_.rest()的逆,也就是除了最后的每个元素? 如果没有,是否有一个首选的惯用解决scheme在Javascript中使用此方法与lodash /下划线样式函数库一起使用,或者这只是挑剔吗?

在此先感谢,并对我的问题中的任何明显的疏漏或错误表示歉意。

为什么要用下划线/ lodash。

 var last = pathArray.slice(-1)[0]; var rest = pathArray.slice(0, -1); 

slice将很容易地为你做这一切…

使用Array.splice https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice ,如果您不想修改原始文件,请执行Array.slice复制原始文件然后Array.splice。

即:

 var rest = pathArray.slice(0); var last = rest.splice(-1, 1)[0];