代码简化书写

32 阅读2分钟

1.使用Map来进行映射

var mapV = new Map([[1, '已完成'], [0, '未完成'], [3, '完成中'], [4, '中途放弃']]);
mapV.get(1);//'已完成'

2.使用includes 替代 || 运算符

// bad 
if (a === 1 || a === 2 || a === 3) { ... } 
// good 
if ([1, 2, 3].includes(a)) { ... }

3.使用Set给数组去重

var Array = [1,3,3,2,4]
console.log([...new Set(Array)])

4.简易策略模式优化 if else

比如:现在有一个场景,需要将人民币转换为各个外国客户所在国的货币结算,客户有英国、美国、澳大利亚、泰国等,如果使用 if else 来进行封装,每次客户扩展你只能改代码改到死。写一个策略模式就行了:

const rateList = {
    '美元':0.5,
    '欧元':0.5
}
const rateKey = Object.keys(rateList)
const targetList = {}
rateKey.forEach(item=>{
    targetList[item] = (price) => {
        return price * rateList[item]
    }
})
const getPrice = (price=100, rate='美元') => {
    return targetList[rate](price)
}
getPrice(100,'美元')

5.阻断提升

其实很简单,把空值、错值提到前面来判断,并阻断代码往下执行:

// bad
import { Message } from 'xxx-ui'; 
if (value) { 
    // 100 行逻辑 
} else { 
    Message.error('value不能为空') 
} 
// good 
import { Message } from 'xxx-ui'; 
if (!value) { 
    Message.error('value不能为空') 
    return 
} 
// 100 行逻辑

6.函数式编程替代for循环

filter;
map; 
some; 
every; 
find; 
findIndex; 
Object.keys; 
Object.values; 
Object.entries; 
...

7.善用 ?. 操作符

对象取值防止代码错误影响正常业务,造成生产事故。同时也能简化各种判空、判非。

if (res && res?.length) { res.map() ... }
Array.isArray(res) && res.length

8.将条件判断内联

def complex_judge(foo, bar, baz): 
    if foo: 
        if bar: 
            return True 
    if baz: 
        return True 
    else: return False 
    # 测试代码 
    print(complex_judge(True, True, False)) 
    print(complex_judge(True, False, False))  
    print(complex_judge(False, True, True))
    # 运行结果 True False True

这样写不仅阅读比较困难,增加或修改判断条件时也很麻烦。

用内联的方式(也就是用 and 和 or)修改后,简洁很多。

def complex_judge(foo, bar, baz): 
    return foo and bar or baz
    
    # 测试代码 
    print(complex_judge(True, True, False)) 
    print(complex_judge(True, False, False))  
    print(complex_judge(False, True, True))
    # 运行结果 True False True