欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > JavaScript 超大量if-else判断如何优化(设计思路)

JavaScript 超大量if-else判断如何优化(设计思路)

2025/2/24 19:33:22 来源:https://blog.csdn.net/wuyxinu/article/details/143372276  浏览:    关键词:JavaScript 超大量if-else判断如何优化(设计思路)

前提:

面试遇到一个挺有意思的问题,就问到,项目这边有个问题,我这边现在一开始只有一个字段F1,有对应的若干个值,然后我们通过if else判断,判断这个值是什么,处理一些数据。再然后到现在,我们的字段已经有了五个字段了,每个字段还有他对应的值,那么我这边的if-else判断语句就多到不行了。这种情况我要怎么处理才好呢?

前期准备

首先手敲准备一份超多if-else的代码。 再来慢慢研究

const TestFunction = () => {if (F1 === 1 && F2 === 1 && F3 === 1 && F4 === 1 && F5 === 1) {executions11111(F1, F2, F3, F4, F5);} /*接下来的几百行*/
}

在这里插入图片描述
肯定不啊,敲都敲死了
用代码生成代码!

let code = "";for (let F1 = 1; F1 <= 4; F1++) {for (let F2 = 1; F2 <= 3; F2++) {for (let F3 = 1; F3 <= 4; F3++) {for (let F4 = 1; F4 <= 3; F4++) {for (let F5 = 1; F5 <= 2; F5++) {code += `if (F1 === ${F1} && F2 === ${F2} && F3 === ${F3} && F4 === ${F4} && F5 === ${F5}) {\n`;code += `    executions${F1}${F2}${F3}${F4}${F5}(F1, F2, F3, F4, F5)\n`;code += `} else `;}}}}
}// 移除最后多余的 'else'
code = code.slice(0, -6);// 输出生成的代码
console.log(code);

在这里插入图片描述
这样写的代码,通过浏览器执行都可以生成对应需要的if-else代码啦

思路

不管怎么优化,我们对应的if-else的执行代码,总是有他不一样的地方的。所以我们直接将内部的代码,抽成一个个的函数

function executions11111(F1, F2, F3, F4, F5) {console.log("executions执行11111");
}

既然可以通过生成代码的方式,生成if-else,代码,那我通过生成代码的方式,来处理这种情况不就好了

const fs = require("fs");
let code = "";for (let F1 = 1; F1 <= 4; F1++) {for (let F2 = 1; F2 <= 3; F2++) {for (let F3 = 1; F3 <= 4; F3++) {for (let F4 = 1; F4 <= 3; F4++) {for (let F5 = 1; F5 <= 2; F5++) {code += `export function executions${F1}${F2}${F3}${F4}${F5}(F1, F2, F3, F4, F5) {\n`;code += `    console.log('executions执行${F1}${F2}${F3}${F4}${F5}')\n`;code += `}\n`;}}}}
}// 移除最后多余的 'else'
code = code.slice(0, -6);// 输出生成的代码
// console.log(code);fs.writeFile("./04_可执行代码.js",code,{encoding: "utf8",flag: "a",},(err) => {if (err) {console.log("文件写入错误:", err);} else {console.log("文件写入成功");}}
);

这样执行完成之后,就可以看到一个有超多执行函数的代码文件啦

在这里插入图片描述
优化后的执行代码

const test = import("./04_可执行代码.js");const F1 = 1; // F1 1 - 4;
const F2 = 3; // F2 1 - 3;
const F3 = 2; // F3 1 - 4;
const F4 = 1; // F4 1 - 3;
const F5 = 2; // F5 1 - 2const TestFunction2 = () => {test.then((res) => {const actionName = `executions${F1}${F2}${F3}${F4}${F5}`;if (typeof res[actionName] === "function") {res[actionName](); // 动态调用 this.action1() 或 this.action2()} else {console.log("No such action found");}});
};TestFunction2();

用异步执行的方式,看起来更高级一点,在vue,react内也可以正常执行
在这里插入图片描述
没毛病。
后续只需要把各个判断块的代码往里面贴就行。
当然,现在没有考虑到后续扩展,以及如果字段的值为非数字该怎么处理。这些等我细细琢磨琢磨再写一篇

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词