開發過程當中常由於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())