开发过程当中常由于if else过多致使代码融于,难以阅读,今天就咱们就一块儿来解决这个问题,让代码更优美,维护更方便,接盘侠更开心javascript
有函数根据传入水果类型返回颜色,代码以下:前端
写法一java
function test(fruit) { if (fruit == 'apple' || fruit == 'strawberry') { console.log('red'); } }
写法二数组
function test(fruit) { // 把同类放到一个中数组 const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; if (redFruits.includes(fruit)) { console.log('red'); } }
function test(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; // 提早丢出不符合条件 if (!fruit) throw new Error('No fruit!'); if (!redFruits.includes(fruit)) return; console.log('red'); // 复合条件放到最后 if (quantity > 10) { console.log('big quantity'); } }
function test(fruit) { if (fruit && fruit.name) { console.log (fruit.name); } else { console.log('unknown'); } } test(undefined); // unknown test({ }); // unknown test({ name: 'apple', color: 'red' }); // apple
优化后的代码app
function test({name} = {}) { console.log (name || 'unknown'); } test(undefined); // unknown test({ }); // unknown test({ name: 'apple', color: 'red' }); // apple
优化前代码函数
function test(color) { switch (color) { case 'red': return ['apple', 'strawberry']; case 'yellow': return ['banana', 'pineapple']; case 'purple': return ['grape', 'plum']; default: return []; } } test(null); // [] test('yellow'); // ['banana', 'pineapple']
优化后代码工具
const fruitColor = { red: ['apple', 'strawberry'], yellow: ['banana', 'pineapple'], purple: ['grape', 'plum'] }; function test(color) { return fruitColor[color] || []; }
使用map方式的代码优化
const fruitColor = new Map() .set('red', ['apple', 'strawberry']) .set('yellow', ['banana', 'pineapple']) .set('purple', ['grape', 'plum']); function test(color) { return fruitColor.get(color) || []; }
例:处理前端角色管理问题ui
封装role字典,加入工具类(util.js内)url
// 角色 const roles = { CUSTOMER: { value: 'CUSTOMER', idValue: 'uid', url: '/pages/home/index' }, OIL_ATTENDANT: { value: 'OIL_ATTENDANT', idValue: 'ouid', url: '/pages/oiler/index' } } // 根据key获取角色 const getRoleByKey = (role) => { return roles[role] || "" } // 获取角色主页 const getRoleUrl = (role) => { return roles[role].url || '' } // 获取当前用户角色 const checkRoleByIdValue = () => { const app = getApp(); const obj = { uid: 'CUSTOMER', ouid: 'OIL_ATTENDANT' } let currentRole Object.keys(obj).forEach(k => { if (app.globalData[k]) { currentRole = obj[k] } }) return currentRole } // 角色id值 const roleIdIs = (role) => { return roles[role].idValue }
页面内引入util方法
import { getRoleByKey, getRoleUrl, checkRoleByIdValue } from '../../utils/utils.js' // 再也不使用if else来判断角色,根据不一样角色的key来储存数据,直接使用工具类,一行代码搞定 saveGlobalAndStorageSync(`${currentRole.idValue}`,data.userInfo) const roleUrl = getRoleUrl(checkRoleByIdValue())