资讯专栏INFORMATION COLUMN

彻底解决if else嵌套问题

zhoutk / 839人阅读

摘要:彻底解决嵌套问题开发过程中常因为过多导致代码融于,难以阅读,今天就我们就一起来解决这个问题,让代码更优美,维护更方便,接盘侠更开心有函数根据传入水果类型返回颜色,代码如下写法一写法二把同类放到一个中数组筛选内多条件处理更早丢出不符合条件的资

彻底解决if else嵌套问题

开发过程中常因为if else过多导致代码融于,难以阅读,今天就我们就一起来解决这个问题,让代码更优美,维护更方便,接盘侠更开心

有函数根据传入水果类型返回颜色,代码如下:

写法一

</>复制代码

  1. function test(fruit) {
  2. if (fruit == "apple" || fruit == "strawberry") {
  3. console.log("red");
  4. }
  5. }

写法二

</>复制代码

  1. function test(fruit) {
  2. // 把同类放到一个中数组
  3. const redFruits = ["apple", "strawberry", "cherry", "cranberries"];
  4. if (redFruits.includes(fruit)) {
  5. console.log("red");
  6. }
  7. }
筛选内多条件处理

更早丢出不符合条件的资源

复合特定条件的放在最后处理

</>复制代码

  1. function test(fruit, quantity) {
  2. const redFruits = ["apple", "strawberry", "cherry", "cranberries"];
  3. // 提前丢出不符合条件
  4. if (!fruit) throw new Error("No fruit!");
  5. if (!redFruits.includes(fruit)) return;
  6. console.log("red");
  7. // 复合条件放到最后
  8. if (quantity > 10) {
  9. console.log("big quantity");
  10. }
  11. }
处理传入参数是object的情况

使用解构赋值来解决
优化前的代码

</>复制代码

  1. function test(fruit) {
  2. if (fruit && fruit.name) {
  3. console.log (fruit.name);
  4. } else {
  5. console.log("unknown");
  6. }
  7. }
  8. test(undefined); // unknown
  9. test({ }); // unknown
  10. test({ name: "apple", color: "red" }); // apple

优化后的代码

</>复制代码

  1. function test({name} = {}) {
  2. console.log (name || "unknown");
  3. }
  4. test(undefined); // unknown
  5. test({ }); // unknown
  6. test({ name: "apple", color: "red" }); // apple
使用map的方式来替换switch

优化前代码

</>复制代码

  1. function test(color) {
  2. switch (color) {
  3. case "red":
  4. return ["apple", "strawberry"];
  5. case "yellow":
  6. return ["banana", "pineapple"];
  7. case "purple":
  8. return ["grape", "plum"];
  9. default:
  10. return [];
  11. }
  12. }
  13. test(null); // []
  14. test("yellow"); // ["banana", "pineapple"]

优化后代码

</>复制代码

  1. const fruitColor = {
  2. red: ["apple", "strawberry"],
  3. yellow: ["banana", "pineapple"],
  4. purple: ["grape", "plum"]
  5. };
  6. function test(color) {
  7. return fruitColor[color] || [];
  8. }

使用map方式的代码

</>复制代码

  1. const fruitColor = new Map()
  2. .set("red", ["apple", "strawberry"])
  3. .set("yellow", ["banana", "pineapple"])
  4. .set("purple", ["grape", "plum"]);
  5. function test(color) {
  6. return fruitColor.get(color) || [];
  7. }
把以上内容优化项目代码

例:处理前端角色管理问题

封装role字典,加入工具类(util.js内)

</>复制代码

  1. // 角色
  2. const roles = {
  3. CUSTOMER: {
  4. value: "CUSTOMER",
  5. idValue: "uid",
  6. url: "/pages/home/index"
  7. },
  8. OIL_ATTENDANT: {
  9. value: "OIL_ATTENDANT",
  10. idValue: "ouid",
  11. url: "/pages/oiler/index"
  12. }
  13. }
  14. // 根据key获取角色
  15. const getRoleByKey = (role) => {
  16. return roles[role] || ""
  17. }
  18. // 获取角色主页
  19. const getRoleUrl = (role) => {
  20. return roles[role].url || ""
  21. }
  22. // 获取当前用户角色
  23. const checkRoleByIdValue = () => {
  24. const app = getApp();
  25. const obj = {
  26. uid: "CUSTOMER",
  27. ouid: "OIL_ATTENDANT"
  28. }
  29. let currentRole
  30. Object.keys(obj).forEach(k => {
  31. if (app.globalData[k]) {
  32. currentRole = obj[k]
  33. }
  34. })
  35. return currentRole
  36. }
  37. // 角色id值
  38. const roleIdIs = (role) => {
  39. return roles[role].idValue
  40. }

页面内引入util方法

</>复制代码

  1. import {
  2. getRoleByKey,
  3. getRoleUrl,
  4. checkRoleByIdValue
  5. } from "../../utils/utils.js"
  6. // 不再使用if else来判断角色,根据不同角色的key来储存数据,直接使用工具类,一行代码搞定
  7. saveGlobalAndStorageSync(`${currentRole.idValue}`,data.userInfo)
  8. const roleUrl = getRoleUrl(checkRoleByIdValue())

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99770.html

相关文章

  • Promise到底解决了什么问题

    摘要:我的博客大家都知道解决了回调地狱的问题。这就是异步的嵌套带来的可读性的问题,它是由异步的运行机制引起的。在与第三方团队沟通之后问题得到了解决。这不但使代码变得臃肿不堪,还进一步加剧了可读性的问题。的特征保证了可以解决信任问题。 我的github博客 https://github.com/zhuanyongxigua/blog 大家都知道Promise解决了回调地狱的问题。说到回调地狱,...

    yibinnn 评论0 收藏0
  • 一篇文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    J4ck_Chan 评论0 收藏0
  • 一篇文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    lakeside 评论0 收藏0
  • 一篇文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    big_cat 评论0 收藏0
  • ES6—Async与异步编程(11)

    摘要:所以异步编程对语言太重要。异步编程我们就以用户注册这个特别常见的场景为例,讲讲异步编程。这种层层嵌套被称为回调地狱。相比回调函数而言,代码可读性更高,代码的执行顺序一目了然。函数内部语句返回的值,会成为方法回调函数的参数。 单线程是Javascript语言最本质的特性之一,Javascript引擎在运行js代码的时候,同一个时间只能执行单个任务。 这种模式的好处是实现起来比较简单,执行...

    chengjianhua 评论0 收藏0

发表评论

0条评论

zhoutk

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<