描述: 取值是0~6,含义分别是周一到周日,编写函数进行转换。
function dayToWeek(day) {
let res = ''
if (day === 0) {
res = '周一'
} else if (day === 1) {
res = '周二'
} else if (day === 2) {
res = '周三'
} else if (day === 3) {
res = '周四'
} else if (day === 4) {
res = '周五'
} else if (day === 5) {
res = '周六'
} else if (day === 6) {
res = '周日'
}
return res
}
上述代码很啰嗦。先用switch改写一下
function dayToWeek(day) {
switch(day) {
case 0: return '周一'
case 1: return '周二'
case 2: return '周三'
case 3: return '周四'
case 4: return '周五'
case 5: return '周六'
case 6: return '周日'
}
}
emmm.....好一点了。有没有更好的写法?--------->表驱动法正式上线
function dayToWeek(day) {
const weekArr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
return weekArr[day]
}
能否再进一步优化呢?
const dayToWeek = day => '周' + ('一二三四五六日'[day] || throwError('错误的传参'))
使用场景拓展1(非线性数据): 数组---->对象
- 例如:前端调用接口,如果报错,需要根据字段值 给用户以提示。如果使用if switch等判断, 代码略冗余。而表驱动法则就像下面这样简洁, 传入字段值则得到提示信息
const codeObj = {
code_1001: 'XXX数据范围不对',
code_1002: 'XXX必须是整数',
code_1003: '请输入一个不重复的XXX',
code_1004: 'XXX和YYY不匹配, 请重新输入',
code_1005: 'XXX...'
}
function codeToInfo(val){
return codeObj[val]
}
使用场景拓展2(阶梯访问表:范围判断)
- 例如:学生成绩, 低于59分为'F', 低于79为'E', 低于84分为'D', 以此类推。 依赖于键值对, 但键、值要放在不同数组中
const grade = [59, 79, 84, 89, 94, 100]
const level = ['F', 'E', 'D', 'C', 'B', 'A']
function getLevel(val){ // 使用for in相比于forEach等遍历方式,好处是可提前跳出循环
for(let i in grade) {
if(val < grade[i]) {
return level[i]
}
}
}