标签:字符串 理解 弊端 uppercase bind 考过 reac 逻辑 tin
函数化编程是指: 当我们需要写一个功能函数时, 不要将大量的逻辑写在同一个函数中, 而是将这个功能块分割成为一个个小的功能模块, 最后通过函数复用来完成目的.
现在有如下对象:
let obj = {
‘oulae_key‘: {
‘ming_key‘: ‘oulae‘
}
}
需求: 将对象中的key 转换为驼峰命名法
直观上, 遇到这种问题的就是一把梭, 把所有的逻辑都写到一个函数中
const log = console.log.bind(console)
const isObject = s => Object.prototype.toString.call(s) === ‘[object Object]‘
const dealFuncKey = (obj) => {
let result = {}
Object.keys(obj).forEach((key) => {
let afterKey = ‘‘
for (let i = 0, len = key.length; i < len; i++) {
let temp = key[i]
if (temp === ‘_‘) {
continue
} else if (key[i - 1] === ‘_‘) {
afterKey += key[i].toUpperCase()
} else {
afterKey += temp
}
}
// result[afterKey] = obj[key]
result[afterKey] = isObject(obj[key]) ? dealFuncKey(obj[key]) : obj[key]
})
return result
}
const __main = () => {
let obj = {
‘oulae_key‘: {
‘ming_key‘: ‘oulae‘
}
}
log(dealFuncKey(obj))
}
__main()
const log = console.log.bind(console)
const isObject = s => Object.prototype.toString.call(s) === ‘[object Object]‘
// 将含有_字符的str 转换为驼峰命名方式
const transfromKey = (str) => {
let result = ‘‘
for (let i = 0, len = str.length; i < len; i++) {
let temp = str[i]
if (temp === ‘_‘) {
continue
} else if (str[i - 1] === ‘_‘) {
result += str[i].toUpperCase()
} else {
result += temp
}
}
return result
}
// 处理Object 主函数
const dealFuncKey = (obj) => {
let result = {}
Object.keys(obj).forEach((key) => {
let afterKey = transfromKey(key)
// result[afterKey] = obj[key]
result[afterKey] = isObject(obj[key]) ? dealFuncKey(obj[key]) : obj[key]
})
return result
}
const __main = () => {
let obj = {
‘oulae_key‘: {
‘ming_key‘: ‘oulae‘
}
}
log(dealFuncKey(obj))
}
__main()
在传统方案中, 我们选择把逻辑封装在一起完成, 没有进行逻辑抽离;
在函数化编程解决方案中, 我们尽量做到一个函数只维持一个功能, 然后通过函数的调用完成逻辑组装.
如果对于个人写demo, 传统的解决方案当然更方面, 你只需要按照自己的思路逻辑一直往后写就行, debug 时也不需要跳转到其他函数;
但是, 这种方案存在着一个非常大的弊端, 如果你面临一个十分复杂的函数, 要处理的情况非常冗杂, 那么用传统方案也许可以完成目标, 但是它会造成一些非常严重的后果:
所以, 虽然函数化编程虽然在第一次写时对于开发者逻辑抽离要求比较高, 同时debug 相较于传统方案比较繁琐, 但是对于复杂的逻辑以及整个项目的生命周求还是非常有好处的
如果在一个项目, 我们使用函数化编程来处理数据, 每个函数只有一个功能, 然后通过函数调用去组织功能; 它在以下的方面是非常有优势的:
标签:字符串 理解 弊端 uppercase bind 考过 reac 逻辑 tin
原文地址:https://www.cnblogs.com/oulae/p/13047275.html