// 以函数为单元
// 实现一个扩展性好的sort函数
// 默认的sort
let ary = [2, 3, -6, 0, -108, 42]
ary.sort()
console.log(ary) // [ -108, -6, 0, 2, 3, 42 ]
// 出错的sort, sort默认是字符串比较,所以需要自己来定义比较规则
ary = [2, 3, -1, -6, 0, -108, 42]
ary.sort()
console.log(ary) // [ -108, -6, 0, 2, 3, 42 ]
ary = [2, 3, -1, -6, 0, -108, 42]
ary.sort(function(x, y) {
if(x < y) return - 1
if(x > y) return 1
return 0
})
console.log(ary)
// 抽象
function compareLessThanOrEqual(x, y) {
if(x < y) return - 1
if(x > y) return 1
return 0
}
ary = [2, 3, -1, -6, 0, -108, 42]
ary.sort(compareLessThanOrEqual)
console.log(ary)
// 函数式是抽象了,但被耦合了。无法单独使用
if(compareLessThanOrEqual(1,1)){
console.log('无法单独使用函数')
}
// 抽象条件,映射转换
function comparator(pred) {
return function(x, y) {
if(pred(x,y)) {
return - 1
} else if (pred(x,y)) {
return 1
} else {
return 0
}
}
}
function lessOrEqual(x, y) {
return x <= y
}
ary = [2, 3, -1, -6, 0, -108, 42]
ary.sort(comparator(lessOrEqual))
console.log(ary)
if(lessOrEqual(1,1)) {
console.log('ok')
}
// 解耦后可以单独使用,也可以通过生成器构将一种数据结构映射成预期的数据结构。
// 函数是跨越两个世界之间的桥梁
js-读书笔记-函数式编程-函数单元
最新推荐文章于 2024-08-22 14:32:34 发布