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