-
2019-06-11 10:14:36
在php中看到这样写法的代码
$form_error OR $post_data['title'] OR array_push($form_error, '请填写文章标题');
初看很疑惑,不知道这样写的目的何在。
其实时根据OR的性质来替代if判断的
这样写如果前面的代码为真,则后面的代码就不会被执行
这样以来,如果 forn_error 中有内容将直接执行下方代码,位于后面的两个都不会被执行,节省了代码的执行效率更多相关内容 -
代替多个if判断的另一种方法
2020-08-10 09:33:52代替多个if判断的另一种方法 对于if的使用大家都不陌生,也是js中常用语法,很好用,但是面对处理大量数据,需要多个if判断时,写在我们的项目中就显得low,自己写起来也有些吃力,这里推荐一个小技巧,利用json类型...代替多个if判断的另一种方法
对于if的使用大家都不陌生,也是js中常用语法,很好用,但是面对处理大量数据,需要多个if判断时,写在我们的项目中就显得low,自己写起来也有些吃力,这里推荐一个小技巧,利用json类型来处理它
举个小例子,大家可以根据项目情况来参考
传统方式代码
// ------------传统方法------------------ // 获得来的node数据,每次操作只返回一个node,比如省市区联级,点击一个级别就返回一个node const node={ level:0, type:'province' } // const node={ // level:1, // type:'city' // } // const node={ // level:2, // type:'area' // } const level = node.level let requestData = {} if (level === 0) { requestData.type = 'province' } if (level === 1) { requestData.type = 'city' } if (level === 2) { requestData.type = 'area' }
新方法代码
const node={ level:0, type:'province' } const level = node.level let requestData = {} const jsonType={ 0:{type:'province'}, 1:{type:'city'}, 2:{type:'area'}, } console.log( jsonType[level]) requestData.type = jsonType[level].type//用一行代码代替if的判断体
-
js中如何更好的替代if...else...语句
2021-11-19 14:19:14在大家平常开发过程中条件判断语句if else的使用频率还是很高的,特别是满屏的if...else...让人难免看着就头疼。 这里我们在某些特定场景为大家额外提供一种其他的思路。 一、二元逻辑运算符:|| /** *在函数...在大家平常开发过程中条件判断语句 if else 的使用频率还是很高的,特别是满屏的if...else...让人难免看着就头疼。
这里我们在某些特定场景为大家额外提供一种其他的思路。一、二元逻辑运算符:||
/** *在函数定义时,常有若函数调用未提供参数则使用默认值的情景, */ function fn(a) { if(!a){ //可以使用if else来解决这个问题: a = 'test'; }; }; //有没有更优雅的去除做法呢? 我们可以使用 || 运算符来实现,如下: function fn(a) { a = 'test' || a }
二、三元运算符: ? :
/** *在开发中三元运算的使用场景其实非常多 *有时候根据条件不同我们可能要分别对应返回不同的数据 */ let fn = function () { //常规if...else... let flo = true; if (flo) { return 1; } else { return 2; }; }; let f = fn(); // 1 //改用三元运算符 let fn1 = function () { let flo = true; // 三元 return flo ? 1 : 2; }; let f1 = fn1();//1
三 、switch case
/** *短路求值与三元运算符固然好用,但其实有一个遗憾, *它们都只能解决非A即B的条件判断,凡是条件判断超过两种就显得十分无力了。 *那难道我们只能使用 else if 吗,其实可以使用 switch case。 */ /** *例如A情况我们希望A情况输出a,B情况输出b,C情况输出c,其它情况输出d *用 else if 与switch case分别是这样: */ let nm = 'B'; if (nm === 'A') { console.log('a'); } else if (nm === 'B') { console.log('b'); } else if (nm === 'C') { console.log('c'); } else { console.log('d'); }; switch (nm) { case 'A': console.log('a'); break; case 'B': console.log('b'); break; case 'C': console.log('c'); default: console.log('d'); }
四 、 对象配置
//如果条件超过三种,else if 写起来不太优雅,switch case代码行数也差不多,如下: function formatData(a) { let c = ""; if (a === 1) { c = "汉族"; } else if (a === 2) { c = "苗族"; } else if (a === 3) { c = "维吾尔族"; } else if (a === 4) { c = "回族"; } else if (a === 5) { c = "藏族"; } // ... 等等等等 return c; } var result = formatData(2) // 对应的苗族 //按照我们56个民族来分,我们岂不是要写56个if...else...,这是可以利用配置对象方式来解决 const obj = { 1: "汉族", 2: "苗族", 3: "维吾尔族", 4: "回族", 5: "藏族", // ...等等等等 }; function formatData(a) { return obj[a] } var result = formatData(2); // 苗族
在实际开发遇到过这样一个情景,需要根据用户不同的操作类型对同一份数据进行不同加工,比如新增,修改,删除等。使用 else if :
function del(){}; // 删除操作 function add(){}; // 新增 function update(){}; // 更新 function process(operateType) { if (operateType === 'del') { del() } else if (operateType === 'add') { add() } else if (operateType === 'update') { update() }; }; process('del');// 删除
还有一种很棒的做法就是通过对象配置,将你的操作类型作为key,具体操作的函数作为value,如下:
function del(){}; // 删除操作 function add(){}; // 新增 function update(){}; // 更新 let typeFn = { 'del': del, 'add': add, 'update': update }; function process(operateType) { typeFn[operateType](); }; process('del'); //删除
也可以使用 ES6 的 map 数据结构,像这样:
let typeFn = new Map([ ['del_1', function () {/*do something*/ }], ['add_2', function () {/*do something*/ }], ['update_3', function () {/*do something*/ }], ]); function process(operateType, status) { typeFn.get(`${operateType}_${status}`)(); }; process('del', 1); // 删除
五 、 数组配置
/** *处理条件判断时,需要根据某阶段设置不同的数据 *如[0,100)–a,[100,200)–b,[200,300)–c,[300-无穷]–d */ //if...else... function setNm(mun) { if (mun< 100) { return 'a'; } else if (mun< 200 && mun>= 100) { return 'b'; } else if (mun< 300 && mun>= 200) { return 'c'; } else if (mun>= 300) { return 'd'; }; }; let nm = setNm(351); //d //其实也可以通过数组配置的形式将条件结果抽离出来 function setNm(param) { let mun = [300, 200, 100]; let nm = ['d', 'c', 'b', 'a']; //对数据做抽离处理,不用加更多的if.else.只对数据处理 for (let i = 0; i < mun.length; i++) { if (param >= mun[i]) { return nm[i]; }; }; return nm[nm.length - 1]; }; let nm = setNm(250); //c
当然具体还是得看业务逻辑,如只能使用if...else...我们该用还是得用
-
js中if else的可替代语句
2020-05-26 14:48:06在JavaScript开发中,条件判断语句 if else 的使用频率还是很高的 这里我们在某些特定场景为大家额外提供一种其他的思路。 一、|| 二元逻辑运算符 在函数定义时,常有若函数调用未提供参数则使用默认值的情景,当然...引言
在JavaScript开发中,条件判断语句 if else 的使用频率还是很高的
这里我们在某些特定场景为大家额外提供一种其他的思路。一、二元逻辑运算符:||
在函数定义时,常有若函数调用未提供参数则使用默认值的情景,当然我们可以使用if else来解决这个问题:
function fn(a) { if(!a){ a = 'test'; }; };
有没有更优雅的去除做法呢?当然,我们可以使用 || 运算符来实现,如下:
function fn(name) { name = name || 'test'; };
二、三元运算符: ? :
三元运算符我想大家都不会陌生,在开发中三元运算的使用场景其实非常多,比如我希望为条件为 true时变量为1,反之为0,通过三元运算符我们可以这样做:
let B = true; let num; if (B) { num = 1; } else { num = 0; }; console.log(num);// 1
改用三元运算符
let B = false, num; B ? num = 1 : num = 0; console.log(num); // 0
有时候在开发中函数常常需要 return 一份数据回去,有时候根据条件不同我们可能要分别对应返回不同的数据,三元一行就可以解决啦:
let fn = function () { let flo = true; if (flo) { return 1; } else { return 2; }; }; let f = fn(); // 1 let fn1 = function () { let flo = true; // 三元 return flo ? 1 : 2; }; let f1 = fn1();//1
三 、switch case
短路求值与三元运算符固然好用,但其实有一个遗憾,它们都只能解决非A即B的条件判断,凡是条件判断超过两种就显得十分无力了。那难道我们只能使用 else if 吗,其实可以使用 switch case。
例如A情况我们希望A情况输出a,B情况输出b,C情况输出c,其它情况输出d,用 else if 与switch case分别是这样:
let name = 'B'; //if else if if (name === 'A') { console.log('a'); } else if (name === 'B') { console.log('b'); } else if (name === 'C') { console.log('c'); } else { console.log('d'); }; //switch case switch (name) { case 'A': console.log('a'); break; case 'B': console.log('b'); break; case 'C': console.log('c'); default: console.log('d'); };
四 、 对象配置
如果条件超过三种,else if 写起来不太优雅,switch case代码行数也差不多,就像下面的代码
function formatData(a) { let c = ""; if (a === 1) { c = "汉族"; } else if (a === 2) { c = "苗族"; } else if (a === 3) { c = "维吾尔族"; } else if (a === 4) { c = "回族"; } else if (a === 5) { c = "藏族"; } // ... 等等等等 return c; } var result = formatData(2) // 对应的苗族
这个要是有64个名族,那我们要写64个else if 啊 ~~,着实有点可怕,那么有没有好的方法呢,看下面代码
const obj = { 1: "汉族", 2: "苗族", 3: "维吾尔族", 4: "回族", 5: "藏族", // ...等等等等 }; function formatData(a) { return obj[a] } var result = formatData(2); // 苗族
上面的代码直接省去64个 else if, 有点小兴奋。
有时候我在实际开发遇到过这样一个情景,我需要根据用户不同的操作类型对同一份数据进行不同加工,比如新增,修改,删除等。那么我用 else if 是这么做的:
function del(){}; // 删除操作 function add(){}; // 新增 function update(){}; // 更新 function process(operateType) { if (operateType === 'del') { del() } else if (operateType === 'add') { add() } else if (operateType === 'update') { update() }; }; process('del');// 删除
还有一种很棒的做法就是通过对象配置,将你的操作类型作为key,具体操作的函数作为value,如下:
function del(){}; // 删除操作 function add(){}; // 新增 function update(){}; // 更新 let typeFn = { 'del': del, 'add': add, 'update': update }; function process(operateType) { typeFn[operateType](); }; process('del'); //删除
当然我们也可以使用 ES6 的 map 数据结构,像这样:
let typeFn = new Map([ ['del_1', function () {/*do something*/ }], ['add_2', function () {/*do something*/ }], ['update_3', function () {/*do something*/ }], ]); function process(operateType, status) { typeFn.get(`${operateType}_${status}`)(); }; process('del', 1); // 删除
五 、 数组配置
在处理条件判断时,我们常会遇到条件与对应结果全部已知的情况,比如我们要根据用户的经验设置等级头衔,[0,100)–萌新,[100,200)–骑士,[200,300)–英雄,[300-无限大]–传说,那么用else if怎么写已经没有悬念了:
function youAreMyHero(experience) { if (experience < 100) { return '萌新'; } else if (experience < 200 && experience >= 100) { return '骑士'; } else if (experience < 300 && experience >= 200) { return '英雄'; } else if (experience >= 300) { return '传说'; }; }; let level = youAreMyHero(351); //传说
对于这种条件与结果已知的情况,我们其实可以通过数组配置的形式将条件结果抽离出来,像这样:
function youAreMyHero(param) { let experience = [300, 200, 100]; let level = ['传说', '英雄', '骑士', '萌新']; for (let i = 0; i < experience.length; i++) { if (param >= experience[i]) { return level[i]; }; }; return level[level.length - 1]; }; let level = youAreMyHero(250); //英雄
这么做的好处就是便于管理条件与执行结果,如果后面新增了等级判断,我们不用去修改业务逻辑中的 else if 语句长度,只用单纯维护我们抽离的数据即可。
总结
以上,我们大致介绍了五种可取代 if else 的方式,具体还是要看业务需求哦 ~ ~
参考链接
-
表驱动法(更优雅的写if-else、switch-case)
2021-10-11 22:25:51表驱动法就是一种编程模式(scheme)——从表里面查找信息而不使用逻辑语句(if 和case)。事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白。但随着逻辑... -
C语言判断题大集合
2019-12-28 13:17:22三、判断题(每小题1分) 1、C 语言具有简洁明了的特点。(1分) 正确 2、预处理命令的前面必须加一个“#”号。(1分) 正确 3、标准格式输入函数scanf()可以从键盘上接收不同数据类型的数据项。(1分) 正确 4... -
Shader中if和for的效率问题以及使用策略
2018-12-10 16:33:50先放结论: if和for确实有效率问题(相比CPU下的情况),但是通常情况无法回避,也就无需处理... 可以用Shader变体来取代一些只和固定参数有关的if,但这只是为了减少if自身的成本(if和里面执行的表达式毕竟也是... -
Shell script的语法四:条件判断语句
2017-01-11 14:13:20if [ 条件判断式 ]; then 当条件判断式成立时,可以进行命令工作的內容; fi 其中条件判断式可以多个中括号隔开,而括号与括号间,则以&&或||来隔开,其用法为:&& 代表 AND ;|| 代表 or ; 2)示例 #!/bin/bash #... -
HAWQ取代传统数仓实践(四)——定期ETL(Sqoop、HAWQ)
2017-05-12 16:03:17这样设计的原因是,我们既要处理完整的数据,不能有遗漏,又不能重复装载数据,这就要求时间处理窗口既要连续,又不能存在重叠的部分。 二、创建维度表当前版本视图 -- 切换到tds模式 set search_path=tds; -- 建立... -
C语言判断题题库
2021-05-20 03:56:06《C语言判断题题库》由会员分享,可在线阅读,更多相关《C语言判断题题库(10页珍藏版)》请在人人文库网上搜索。1、三、判断题( 10 道小题,共10 分)1、 C...( 1 分)正确4、在 if 语句的三种形式中,如果要想在满足条... -
iOS之深入解析文件内存映射MMAP
2021-08-31 19:33:16缺页异常进行一系列判断,确定无非法操作后,内核发起请求调页过程。 调页过程先在交换缓存空间(swap cache)中寻找需要访问的内存页,如果没有则调用 nopage 函数把所缺的页从磁盘装入到主存中。 之后进程即可对... -
【深入kotlin】 - 基础语法(二)
2021-11-26 18:32:57判断 if 比 swift 中有所扩展。比较特别的地方是支持三目运算(swift 中时 ? : 三目运算符): a = if(c==b) c else b 甚至可以使用多行语句,最后一句的表达式自动返回(不需要 return): str = if(a<0) { ... -
优雅判空--Optional.ofNullable()方法
2022-01-06 15:37:56针对这种情况经常会使用if进行判断,比如示例一这样: 示例一: private boolean isNotNull(Object param) { if (param == null) { return false; } else { return true; } } 这还仅仅是针对某个对象进行判... -
c语言题库之判断题
2019-01-10 22:07:324、在if语句的三种形式中,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。(1 分) 正确 5、continue 不是结束本次循环,而是终止整个循环的执行。(1分)... -
Jvm面试题总结及答案 300道(针对Jvm的面试题 )
2021-12-15 14:05:41存在内存空间碎片化问题,会产生大量不连续的内存碎片,导致以后需要分配大对象时容易触发 Full GC。 标记-复制算法 为了解决内存碎片问题,将可用内存按容量划分为大小相等的两块,每次只使用其中一块。当使用的... -
hdu acm 2108 Shape of HDU(判断凸多边形)
2016-02-23 18:44:34政府划拨的这块用地是一个多边形,为了描述它,我们用逆时针方向的顶点序列来表示,我们很想了解这块地的基本情况,现在请你编程判断HDU的用地是凸多边形还是凹多边形呢? Input 输入包含多组测试... -
13 万字 C 语言从入门到精通保姆级教程2021 年版
2021-06-07 12:25:0113 万字C语言保姆级教程,从入门到精通。 -
如何判断凸边形或者凹变形
2018-04-11 15:59:51已知四边形四个点坐标 p1 = (x,y), p2 = (x,y), p3 = (x,y), p4 = (x,y) 判断凹凸性及凹点位置 t1 = (p4.x-p1.x)(p2.y-p1.y)-(p4.y-p1.y)(p2.x-p1.x) t2 = (p1.x-p2.x)(p3.y-p2.y)-(p1.y-p2.y)(p3.x-p2.x) t3 = ... -
对不起,学会这些 Linux 知识后,我有点飘
2020-10-10 07:18:49rmdir 删除文件目录 tail 提取文件最后几行 tr 字符集转换 grep 分组 cat 将多个文件连续标准输出 od 以八进制显示文件 cut 从文件中剪切 paste 从文件中粘贴 Linux 内核结构 在上面我们看到了 Linux 的整体结构,... -
2w 字长文爆肝 JVM 经典面试题!太顶了!
2021-04-06 22:59:066.3.1 JDK 8 与元数据 在 JDK 8 中,永久代已经被移除,被一个称为“元数据区”(元空间)的区域所取代。元空间的本质和永久代类似,元空间与永久代之间最大的区别在:元空间并不在虚拟机中,而是使用本地内存。因此... -
一个合格的中级前端工程师需要掌握的技能笔记(中)
2021-06-03 00:38:58要检查对象是否具有自己定义的属性,而不是其原型链上的某个属性,则必须使用所有对象从 Object.prototype 继承的 hasOwnProperty JavaScript 中的相等性判断 抽象(非严格)相等比较 (==) 严格相等比较 (===): 用于... -
重磅干货 | 五万字长文总结 C/C++ 知识(上)
2021-06-10 00:41:39链接 | https://github.com/huihut/interviewC/C++ 知识总结这是一篇五万字的C/C++知识点总结,包括答案:这是上篇,下篇今天也推送了,需要的同学记... -
【踩坑记录】Quartz避坑指南,看这一篇就够了。。。
2020-06-03 23:34:31StatefulJob已被DisallowConcurrentExecution/PersistJobDataAfterExecution注解取代 Job的创建 Job的创建由专门的工厂来完成 Job Factory结构 Job是在Quartz内部创建,受Scheduler控制,因此不需要外部参与。... -
【C语言】根据日期判断星期几(使用基姆拉尔森计算公式)
2018-07-06 17:05:05C语言根据日期判断星期几(使用基姆拉尔森计算公式)算法如下: 基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他... -
你不得不了解的机器学习知识
2020-02-14 19:51:07这是一种基于 if-then-else 规则的有监督学习算法,决策树的这些规则通过训练得到,而不是人工制定的。 (1)决策树例子 银行要用机器学习算法来确定是否给客户发放贷款,为此需要考察客户的年收入,是否有房产这... -
关于Linux进程你所需要知道的一切都在这里!!
2020-06-02 00:50:54非常详细的linux进程知识点!图文并茂 -
HDU 2108 Shape of HDU(判断给定的图形是否是凸多边形)
2013-07-19 16:11:06其实在判断的时候就是连续的三个点按照顺序来判断差积是不是>=0的如果不是那就不是 开始我在判断的时候直接从0-n wa了一次 后来发现不对,改成0-n 和n-1 n 1三个点判断一次,wa 后来发现 0-n n-1 n 1 和n 1... -
【JDK源码剖析】Java数值类型的包装类
2019-07-13 14:15:35文章目录概述Comparable接口Number抽象类包装类字段部分构造方法普通方法装箱拆箱从属性中解析值逆字符串化内容字符串化无符号化比较位操作简单运算剩余代码自动装箱与自动拆箱 概述 Java是一种强类型语言,必须为每... -
常用分布式计算任务调度算法
2019-05-10 10:12:38第三次握手信号经由前端HUB到达各个Server节点,包过滤模块检查该应答信号的ACK序列号是否与自身的初始序列号一致,即判断NACK和(NISN+1)是否相等,如果相等,则允许通过;否则向上层TCP协议栈发送一个RST数据包以... -
计算机视觉是否已经进入瓶颈期?
2020-09-27 09:33:57if you don't solve vision, it's not solved… You can absolutely be superhuman with just cameras." - Elon Musk --- 先说同意的部分: 长远来看,未来(作为落地的产品的)自动驾驶、机器人等等,camera 应该...