当前位置: 首页 > 知识库问答 >
问题:

javascript - 遇到一道设计模式的面试题,各位大佬看下如何解决,题目要求是优化这段业务代码?

佟嘉祯
2024-03-11

遇到一道设计模式的面试题,各位大佬看下如何解决,题目要求是优化这段业务代码
条件是布尔值或者函数返回值,cb 是函数

function runTask() {  if(条件A){    cbA()    if(条件B){      cbB()    }  }  if(条件C){    cbC()    if(条件D){      cbD()    }  }}

共有4个答案

晏阳飙
2024-03-11
function A() {  console.log("execute task A");}function B() {  console.log("execute task B");}function C() {  console.log("execute task C");}function D() {  console.log("execute task D");}function runTask() {  const conditionA = () => true;  const conditionB = () => false;  const conditionC = () => false;  const conditionD = () => true;  const processFlows = [      [        [conditionA, A],        [conditionB, B]      ],      [        [conditionC, C],        [conditionD, D]      ]     ];    for(const flow of processFlows) {    for(const [condition, task] of flow) {      if(condition()) task();      else break;    }  }}
茹建茗
2024-03-11
function runTask() {    ;(        [            [conditionA, cbA],            [conditionA && conditionB, cbB],            [conditionC, cbC],            [conditionC && conditionD, cbD]        ] as const    ).forEach(([condition, callback]) => condition && callback())}
袁良弼
2024-03-11

从题目看不出优化点,有可能是你脱敏的时候搞丢了。

景成和
2024-03-11

优化的方向有给吗?

我暂时想不出什么优化方案了,蹲一波。

function runTask() {  if (条件A) {    条件B ? cbB() : cbA()  }  if (条件C) {    条件D ? cbD() : cbC()  }}
function runTask(params) {  const items = [    {      validator: (params) => 条件A,      func: () => {        // cbA      },    },    {      validator: (params) => 条件A && 条件B,      func: () => {        // cbB      },    },    {      validator: (params) => 条件C,      func: () => {        // cbC      },    },    {      validator: (params) => 条件C && 条件D,      func: () => {        // cbD      },    },  ];  items.forEach((item) => {    if (item.validator(params)) {      item.func();    }  });}
 类似资料:
  • 如何将两个方法合并成一个方法 如图parentValues = ['BC', 'BC-SRV', 'BC-SRV-COM'], 想得到的是选中的树组arrSelectedFacets = ['BC-SRV-COM-FTP', 'BC-SRV-COM-TEL'] 如果 BC-SRV-COM 下的子节点都选中,则arrSelectedFacets=['BC-SRV-COM']

  • 在写leetcode每日一题的过程中遇到了一些无法解决的问题。 我进行了多次调试,虽然解决了问题,但是解决的莫名奇妙,也不知道为啥突然就能运行了。。。 题目描述: 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以匹配: 字符串 words[i] 等于 words[j] 的反转字符串

  • 本文向大家介绍PHP经典面试题之设计模式(经常遇到),包括了PHP经典面试题之设计模式(经常遇到)的使用技巧和注意事项,需要的朋友参考一下 设计模式在面试过程中经常会提到,有时候还会让我们举例说明各种设计模式的应用场景。 使用设计模式可以减轻我们的工作量,优化我们的代码。 设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式 如果有代码有什么问题或者有更好的方式请告知,谢谢!!

  • 直接上代码 我 span 高度是 6px; 如何使 div 高度自适应 span 高度? 目前执行的代码 div 高度是 22.5px

  • v3的hash模式下有遇到过这个问题吗? 接口返回的地址后面有4个#号键例如(http://*/index.html####NKFDSAFJSKF...) 打开这个地址后就会变成 http://*/index.html#/###NKFDSAFJSKF...(打不开网页) 但是自己拼接的地址: 协议、域名、端口号+/index.html####+${useddata} 打开这个地址后就会变成 htt

  • 出现的bug就是,当我点击某一行的“预约”按钮时,调用接口,当接口返回的res.code=='00000' 时,应该是只改变当前点击行的按钮名称,现在时所有的按钮都发生改变。正确地应该是点击的那行按钮发生改变。其他的是不会发生变化的