ramda 日常使用
https://adispring.github.io/
ramda对函数参数的个数要求比较严格, 虽然可以使用R.__占位符, 但是一般情况下还是尽量少用
注意, ramda主要用于数据流而非逻辑流
模拟数组操作, 注意普通的迭代函数并没有加入index, 在需要时, 需要自己添加
尽量使用库的遍历方式, 鬼知道神奇的各种webview有没有实现相应的方法…. (遇到过数组没有flat的…..)
const map = R.addIndex(R.map)
map((v, i) => console.log(v, i), R.range(10, 16))
// 10 0
// 11 1
// 12 2
// 13 3
// 14 4
// 15 5
递归求解fib
const R = require("ramda")
const fib = n => R.unless(
R.gte(2),
() => fib(n - 1) + fib(n - 2)
)(n)
// 0--1--2--3--5--8--13--21--34--55
console.log(
R.map(fib, R.range(0, 10)).join("--")
);
条件赋值
const getCount = R.ifElse(
R.has("count"),
R.evolve({count: R.inc}),
R.assoc("count", 0)
)
console.log(getCount({})) // { count: 0 }
console.log(getCount({count: 10})) // { count: 11 }
带默认值的查找
const list = [
{id: 1, name: "a"},
{id: 2, name: "b"},
{id: 3, name: "c"}
]
const findStu = id => R.defaultTo(
{name: "default"},
R.find(R.propEq("id", id), list)
)
console.log(findStu(1)) // { id: 1, name: "a" }
console.log(findStu(2)) // { id: 2, name: "b" }
console.log(findStu(3)) // { id: 3, name: "c" }
console.log(findStu(4)) // { name: "default" }
代替switch
const getGrade = R.cond([
[R.gte(R.__, 90), R.always("优秀")],
[R.gte(R.__, 60), R.always("及格")],
[R.gte(R.__, 0), R.always("不及格")],
[R.T, R.always("error")]
]
)
// 不及格
// 及格
// 优秀
// error
console.log(getGrade(59))
console.log(getGrade(60))
console.log(getGrade(90))
console.log(getGrade("abc"))
代替if-else
const gt3 = R.when(R.lte(R.__, 3), R.multiply(2))
const a = R.range(1, 6)
console.log(a) // [ 1, 2, 3, 4, 5 ]
console.log(R.map(gt3, a)) // [ 2, 4, 6, 4, 5 ]
快排
const quickSort = R.cond(
[
[R.isEmpty, R.always([])],
[
R.T,
xs => {
const head = R.head(xs);
const tail = R.tail(xs);
return R.compose(quickSort, R.filter(R.lte(R.__, head)))(tail)
.concat(head)
.concat(R.compose(quickSort, R.filter(R.gte(R.__, head)))(tail));
}]
]
);
// 1--3--4--5--6--7--9
console.log(
quickSort([5, 1, 9, 4, 6, 7, 3]).join("--")
)
简化
const quickSort2 = R.unless(
R.isEmpty,
([head, ...tail]) => [
...R.compose(quickSort, R.filter(R.lte(R.__, head)))(tail),
head,
...R.compose(quickSort, R.filter(R.gte(R.__, head)))(tail),
]
);
// 1--3--4--5--6--7--9
console.log(
quickSort2([5, 1, 9, 4, 6, 7, 3]).join("--")
)