ES6函数式编程笔记-1

好书 ( 强推


掌握ES6 的一些基本即可试读
本书由浅入深 层层递进

书中代码仓库

一些概念及代码


一等公民

当一门 允许函数作为任何其他数据使用时

合理代码

  • 必要的注释
  • 见名知意
  • 函数不应依赖全局变量
    • 若并发执行 结果难以预料
闭包函数

  • 作用域
    • 自身内声明变量
    • 全局变量访问
    • 对外部函数变量访问
高阶函数

  • Higher-Order Function( HOC )
    • 以函数作为参数 并且或者返回函数作为输出的函数
    • 抽象 将独特功能 做成通用功能
// 仅执行一次的函数
const once = (fn) => {
	let done = false
	return function() {
		// 此处括号用的精妙
		return done ? undefined : (done=true, fn.apply(this, arguments))
	}
}

// 缓存
const memoized = (fn) => {
	const lookupTable = {}
	// 此处返回值 用的精妙 可参考例1运行结果
	return (arg) => lookupTable[arg] || (lookupTable[arg]=fn(arg)) 
}

// 例1
 var o = {
        a : 7,
        get a(){return 1;},//死循环
        set a(){}
};
var a = () => (o.a = 4443)
数组相关

const map = (array, fn) => {
	let results = []
	for(let value of array) {
		results.push(fn(value))
	}
	return results
}

const filter = (array, fn) => {
	let results = [];
	for(let value of array) {
		(fn(value)) ? results.push(value):undefined 
	}
	return results
}

const reduce = (array, fn, initialValue) => {
	let acc = initialValue ? initialValue : array[0]
	if(initialValue) {
		for(let value of array) {
			acc = fn(acc, value)
		}
	} else {
		// 数组第一个元素被做为初始值
		for(let i = 1;i < array.length; i++) {
			acc = fn(acc, array[i])
		}
	}	
	return [acc]
}

const sortBy = (property) => {
	return (a, b) => {
		(a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0 })
	}
}

var people = [
    {firstname: "aaFirstName", lastname: "cclastName"},
    {firstname: "ccFirstName", lastname: "aalastName"},
    {firstname:"bbFirstName", lastname:"bblastName"}
];

//sorting with respect to firstname
console.log("FirstName sort manually",people.sort((a,b) => { return (a.firstname < b.firstname) ? -1 : (a.firstname > b.firstname) ? 1 : 0 }))

//sorting with respect to lastname
console.log("LastName sort manually",people.sort((a,b) => { return (a.lastname < b.lastname) ? -1 : (a.lastname > b.lastname) ? 1 : 0 }))

//sorting with respect to firstname using sortBy
console.log("Firstname using sortBy hoc",people.sort(sortBy("firstname")))

//sorting with respect to firstname using sortBy
console.log("lastName using sortBy hoc",people.sort(sortBy("lastname")))

// ['1', '2', '3'].map(parseInt)
// map 默认有3个参数  value index array
// parseInt 默认有2个参数 第2个参数 指定转换数字的基数
// 将函数改造为 只接受一个参数的函数
const unary = (fn) => {
	return fn.length === 1 ? fn : (arg)=>fn(arg) 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值