使用Ramda.js实现这一目标的最佳方法是什么?
function innerVals(array) {
const lengthMinus1 = array.length - 1;
return array.slice(1, lengthMinus1);
}
我似乎找不到一个好的方法,直到长度-1,而不是存储在某个地方的变量。我能想到的最好方法是使用Ramda的收敛函数,如下所示:
// innerVals :: Array -> Array
function innerVals(array) {
// lengthMinus1 :: Array -> Number
const lengthMinus1 = R.pipe(R.length, R.subtract(_, 1));
// getVals :: Array -> Array
const getVals = R.converge(
R.slice(1, _, _),
[lengthMinus1, R.identity]
);
return getVals(array);
}
我很难相信这是实现如此简单的目标的一种干净的方式。函数式编程方法中有更多的代码,我也认为其他开发人员阅读/维护起来会更加困难。我是不是遗漏了什么?如果有人有不同的方法,请告诉我。谢谢!
发布于 2016-03-10 11:39:18
Ramda有一个函数init
,它“返回给定列表或字符串的最后一个元素”。所以
R.compose(R.init, R.tail)([1, 2, 3, 4, 5]); //=> [2, 3, 4]
你可以在Ramda REPL上看到这个
发布于 2016-03-10 12:39:19
我推荐R.slice
> R.slice(1, -1, [1, 2, 3, 4, 5])
[2, 3, 4]
> R.slice(1, -1)([1, 2, 3, 4, 5])
[2, 3, 4]
发布于 2016-03-10 10:59:19
怎么样
innerVals = R.compose(
R.drop(1),
R.dropLast(1));
console.log(innerVals([1,2,3,4,5])) // [2,3,4]
或者简单的slice
innerVals = R.slice(1, -1)
https://stackoverflow.com/questions/35924229
复制