函数式编程

函数式

一、函数式编程的出现

  • 发展历程:命令(脚本)式 -> 面向对象式 -> 函数式编程
  • 使用:lodash ramda

1. 问题的出现 - 从一道面试题开始

  • 面试题: 上接浏览器原理 —— 参数 parse
题目:数组在url中展示形式

location.search=>‘?name[]=progressive %coding&name[]=objective %coding&name[]=functional$%coding’

要求:参数提取拼接成数组

[‘progressive %coding', 'objective %coding’, ‘functional$%coding’]

手写方法:转换成数组对象

[{name: ‘Progressive Coding’}, {name: ‘Objective Coding’}, {name: ‘Functional Coding’}

     //解决
	 const _array = ['progressive$%coding', 'objective$%coding', 'functional$%coding'];
	 const _objArr = [];

 	 const nameParser = (array, objArr) => {
   
     	array.forEach(item => {
   
         	let names = item.split('$%');
        	let newName = [];
    		names.forEach(name => {
   
         		let nameItem = name[0].toUpperCase() + name.slice(1);
 
         		newName.push(nameItem);
     		})
     		objArr.push({
   
         		name: newName.join(' ');
     		});
 		})
 		return objArr
     }

 	 console.log(nameParser(_array, _objArr));
存在的问题
  1. 过程中存在逻辑包裹 - 看完整段代码,才能明白在做啥
  2. 存在临时变量,并且收尾封闭 - 迭代拓展难度高

2. 优化的解决方案

  1. 需求分析:最根本的需求是: 将数组转换数组对象,即数组中[字符串=>对象](['progressive$%coding'] => [{ name: 'Progressive Coding'}])

     nameParser => [objHelper : string > object(把string转成对象)]//string > object(把string转成对象)
    
  2. 模块功能明确:支撑需求做的子需求,该数组对象由格式化后的字符串,加上对象{}的包裹

    objHelper = formatName + assembleObj 
    
  3. 功能拆分:格式化字符串包括拆分,首字母大写,用空格合并

    objHelper = [(split + capitalize + join)] + assembleObj
    
  4. 代码实现

    • compose从右往左运行
    	// 输入
        const _array = ['progressive$%coding', 'objective$%coding', 'functional$%coding'];
    
        // 原子操作
        const assembleObj = (key, x) => {
         
            let obj = {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨龙王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值