【前端三分钟】优化判断语句

简介: 【前端三分钟】优化判断语句

在之前的文章中曾经介绍过ES6的Map,并给出如何使用Map替换if-else语句的,但那篇文章中只是简单介绍。这篇文章会对判断语句的优化进行进一步的介绍。

if-else

let status = 0;
if(status === 1) {
    //todo
}else if(status === 2) {
    //todo
}else if(status === 3) {
    //todo
}
...
else {
    //todo
}

这个例子中,有多个if-else分支用来判断多种status的取值情况。

接着使用switch对上面代码进行改造:

switch

let status = 0;
switch (status) {
    case 1:
        //todo
    break;
    case 2:
        //todo
    break;
    case 3:
        //todo
    break;
    ...
    default:
        //todo
    break;
}

可以发现,当需要判断的情况多了,if-elseswitch差别并不大。尽管switch在语句上更清晰了一些。

OK,我们继续优化:使用对象+一元条件运算符的方式:

对象+ 一元条件运算符

let status = 1;
const todoList = {
    '1': ['todo'],
    '2': ['todo'],
    '3': ['todo'],
    ...
    'default': ['todo']
}
let todo = todoList[status] || todoList['default'];
//todo

这种方法将判断条件作为对象的属性名,将处理逻辑作为对象的属性值,通过对象属性名查找的方式进行逻辑处理。

但是,别停,还有其他方法:

Map

let status = 1;
const todoList = new Map([
    [1,['todo']],
    [2,['todo']],
    [3,['todo']],
    ['default',['todo']]
])
let todo = todoList.get(status) || todoList['default'];
//todo

这里使用到ES6的Map对象,使用键值对的方式进行条件匹配。但是,有人可能会问Map对象和前一个的Object对象有什么区别呢?

  • 一个Object通常都有自己的原型,即’prototype’
  • 一个Object的键只能是字符串Symnols,但一个Map的键可以是任意值。
  • Map的键值对个数可以通过Map.prototype.size得到,而对象的键值对个数只能通过手动确认。

为了更加明显的突出Map的作用,我们再来看一个例子:

进一步介绍Map

let status = 0;
let color = 'blue';
if(color === 'blue') {
    if(status === 1) {
        //todo
    }else if(status === 2) {
        //todo
    }else if(status === 3) {
        //todo
    }else {
        //todo
    }
}else if(color === 'yellow') {
    if(status === 1) {
        //todo
    }else if(status === 2) {
        //todo
    }else if(status === 3) {
        //todo
    }else {
        //todo
    }
}

这是一个二元判断,此时判断量就是加倍,代码也加倍。那么我们用Map来改造下:

let status = 0;
let color = 'blue';
const todoList = new Map([
    ['bule_1', ()=>{
        //todo
    }],
    ['blue_2', ()=>{
        //todo
    }],
    ['yellow_1', ()=>{
        //todo
    }],
    ['yellow_2', ()=>{
        //todo
    }],
    ['default_1', ()=>{
        //todo
    }],
])
let todo = todoList.get(`${color}_${status}`) || todoList.get('default');
todo.call(this);

这时,我们把二元判断的条件拼接成字符串,并用其为Map的键名。这种写法在多元条件判断时很好用。

当然,如果你觉得用字符串拼接有点变扭,你还可以这样:

const todoList = new Map([
    [{color:'bule',status:1}, ()=>{
        //todo
    }],
    [{color:'bule',status:2}, ()=>{
        //todo
    }],
    [{color:'yellow',status:1}, ()=>{
        //todo
    }],
    [{color:'yellow',status:2}, ()=>{
        //todo
    }],
    ['default', ()=>{
        //todo
    }],
])

这里我们使用了对象作为键名。这就是Map比Object的有优点的地方,即Map可以用任何类型的数据作为Key

进一步优化- 将处理逻辑缓存

const fnA = () => {}
const fnB = () => {}
const todoList = new Map([
    [/^color_[1-3]$/,fnA],
    ['default', fnB],
])
let todo = [...todoList()].filter(([key,value])=>(key.test(`${color}_${status}`)))
todo.forEach(([key,value])=>value.call(this))

这里,我们使用正则作为Map的key,符合正则的条件就会被执行。

总结

从上面的案例中,我们知道,判断可以从if-elseswitchObjectMap几种方式进行处理,Map不是绝对的,每种方式都有它适用的场景。



相关文章
|
1月前
|
缓存 边缘计算 监控
2024年前端性能优化的新策略
【10月更文挑战第3天】本文分享了一些2024年前端性能优化的新策略,希望能够为前端开发者提供实用的参考和指导。在实际开发中,应根据应用的具体需求和场景选择合适的优化方法。
|
26天前
|
前端开发 JavaScript UED
深入了解前端性能优化:提高用户体验的关键
【10月更文挑战第9天】深入了解前端性能优化:提高用户体验的关键
42 5
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化:从基础到进阶的实践指南
【10月更文挑战第4天】在前端开发中,性能优化至关重要,尤其随着Web应用的复杂化,用户对加载速度和响应性的要求日益提高。本文从基础知识入手,涵盖代码压缩、图片优化及缓存策略,并深入探讨代码拆分、懒加载和Web Workers等进阶技巧,帮助开发者全面提升Web应用的用户体验。通过这些方法,不仅能够减少页面加载时间,还能提升响应性和渲染性能,为用户提供更流畅的使用体验。
56 1
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化:提升用户体验的关键策略
【10月更文挑战第4天】前端性能优化:提升用户体验的关键策略
48 1
|
8天前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
23 5
|
9天前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
37 7
|
9天前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
22 2
|
15天前
|
缓存 前端开发 JavaScript
前端性能优化:打造流畅用户体验的秘籍
【10月更文挑战第20天】前端性能优化:打造流畅用户体验的秘籍
28 3
|
15天前
|
存储 缓存 算法
前端算法:优化与实战技巧的深度探索
【10月更文挑战第21天】前端算法:优化与实战技巧的深度探索
13 1
|
15天前
|
缓存 前端开发 JavaScript
如何优化前端资源
如何优化前端资源
下一篇
无影云桌面