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

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

在之前的文章中曾经介绍过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不是绝对的,每种方式都有它适用的场景。



相关文章
|
11天前
|
缓存 监控 前端开发
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
【4月更文挑战第30天】本文探讨了Flutter应用启动优化策略,包括理解启动过程、资源加载优化、减少初始化工作、界面布局简化、异步初始化、预加载关键数据、性能监控分析以及案例和未来优化方向。通过这些方法,可以缩短启动时间,提升用户体验。使用Flutter DevTools等工具可助于识别和解决性能瓶颈,实现持续优化。
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
|
14天前
|
缓存 前端开发 搜索推荐
如何优化前端性能:提升网页加载速度的5个技巧
在当今互联网时代,网页加载速度是用户体验和搜索引擎排名的关键因素之一。本文将介绍5个有效的技巧,帮助前端开发人员优化网页性能,提升用户体验。
|
14天前
|
存储 缓存 NoSQL
Redis多级缓存指南:从前端到后端全方位优化!
本文探讨了现代互联网应用中,多级缓存的重要性,特别是Redis在缓存中间件的角色。多级缓存能提升数据访问速度、系统稳定性和可扩展性,减少数据库压力,并允许灵活的缓存策略。浏览器本地内存缓存和磁盘缓存分别优化了短期数据和静态资源的存储,而服务端本地内存缓存和网络内存缓存(如Redis)则提供了高速访问和分布式系统的解决方案。服务器本地磁盘缓存因I/O性能瓶颈和复杂管理而不推荐用于缓存,强调了内存和网络缓存的优越性。
40 1
|
20小时前
|
Web App开发 缓存 前端开发
如何优化前端网页加载速度:最佳实践和工具推荐
本文探讨了如何通过采用最佳实践和利用先进的工具来优化前端网页加载速度。从压缩资源到使用CDN,从减少HTTP请求到利用缓存策略,我们将介绍一系列提高网页性能的技术手段。同时,我们还将推荐一些广受好评的工具,帮助开发者更轻松地实施这些优化策略。
|
1天前
|
缓存 前端开发 JavaScript
如何优化前端性能:最佳实践与工具推荐
在当今互联网时代,用户对网页加载速度和性能的要求越来越高。本文将介绍一些优化前端性能的最佳实践,包括代码压缩、资源合并、懒加载等技术,并推荐一些实用的工具,帮助开发者提升网页加载速度和用户体验。
|
4天前
|
前端开发 JavaScript UED
如何优化前端网页加载速度
在当今互联网时代,网页加载速度是用户体验的关键因素之一。本文将探讨如何通过优化前端技术,提升网页加载速度,包括压缩资源、使用CDN加速、减少HTTP请求等方法。
|
5天前
|
缓存 前端开发 JavaScript
优化前端性能的五大技巧
在当今快节奏的网络世界中,优化前端性能是网站开发中至关重要的一环。本文将介绍五种有效的技巧,帮助开发者提升前端性能,提升用户体验和网站效率。
|
11天前
|
存储 缓存 前端开发
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化
【4月更文挑战第30天】本文探讨了 Flutter 中如何优化图片加载与缓存,以提升移动应用性能。通过使用图片占位符、压缩裁剪、缓存策略(如`cached_network_image`插件)以及异步加载和预加载图片,可以显著加快加载速度。此外,利用`FadeInImage`、`FutureBuilder`和图片库等工具,能进一步改善用户体验。优化图片处理是提升Flutter应用效率的关键,本文为开发者提供了实用指导。
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化
|
11天前
|
缓存 前端开发 数据安全/隐私保护
【Flutter 前端技术开发专栏】Flutter 中的键盘处理与输入框优化
【4月更文挑战第30天】本文探讨了Flutter中键盘处理与输入框优化的关键技术,包括监听键盘显示隐藏、焦点管理、键盘类型适配、输入框高度自适应、处理键盘遮挡问题及性能优化。通过使用WidgetsBindingObserver、FocusNode和TextInputType等工具,开发者能提升用户体验,确保输入框在各种场景下的良好表现。实例分析和实践建议有助于开发者将这些方法应用于实际项目。
【Flutter 前端技术开发专栏】Flutter 中的键盘处理与输入框优化
|
11天前
|
前端开发 UED 开发者
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化
【4月更文挑战第30天】Flutter开发中,优化列表和滚动视图至关重要。本文介绍了几种优化方法:1) 使用`ListView.builder`和`GridView.builder`实现懒加载;2) 复用子组件以减少实例创建;3) 利用`CustomScrollView`和`Slivers`提升滚动性能;4) 通过`NotificationListener`监听滚动事件;5) 使用`KeepAlive`保持列表项状态。掌握这些技巧能提升应用性能和用户体验。
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化