我在我的node.js项目中是lodash / underscore的狂热用户,我发现自己处于这样一种情况:我需要以类似于下面代码的方式从右到左递归迭代一个数组(假设所有调用都是同步的:
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 / underscore是否包含一个更简单,更清晰的方法来获取_.rest()的反转,即除了最后一个元素之外的每个元素?如果没有,是否有一个首选的惯用解决方案,用于在Javascript中实现此方法以与lodash /下划线样式的函数库一起使用,或者这只是简单的挑选?
提前致谢,并对我的问题中的任何明显遗漏或错误道歉。
答案 0 :(得分:3)
为什么要打扰下划线/ lodash。
var last = pathArray.slice(-1)[0];
var rest = pathArray.slice(0, -1);
slice
会很容易地为你完成这一切......
答案 1 :(得分:0)
使用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];