首页 > 编程语言 >业务功能探索之条件分支全覆盖,includes能否一劳永逸【玩转JavaScript】

业务功能探索之条件分支全覆盖,includes能否一劳永逸【玩转JavaScript】

时间:2023-08-05 12:01:11浏览次数:29  
标签:判断 name JavaScript includes let 玩转 key true

灵感闪现

某天,正在认真的敲代码,突然同事问了我一个问题,虽然不难,但是解决方案还是挺有趣的。

所以写写这篇文章,详细记录一下实现过程。

这个功能来自业务功能中的条件分支全覆盖,原本的做法一个includes轻松搞定,而这次,我心生了一点点疑问:includes真的能一劳永逸吗?

JS 实验开始

includes 不是一劳永逸的法子?

编程欢乐小剧场

一:年轻人,为何唉声叹气。

某:代码改漏了,太不严谨了。

一:哪里,我看看。

某:这里,表单里新增一个表单项,结果条件判断漏加了。

一:确实,分散的条件判断就会有漏改的风险。

某:有改善的方法不。

一:当然。

某:键盘奉上。

一种情况

合并多个条件判断,是使用 includes 最常见的用法。

如下的功能中,需要判断输入的字符串是否包含作者自己的名字。

function func(name) {
  if (name === 'ye' || name === 'yi') {
    return 'self';
  }
  return 'other';
}
let nameStr = 'zhang';
let res = func(nameStr);
console.log(res); // 'other'

如果再增加一个判断,是否有作者好友的名字。条件会不断增加,不优雅且容易漏掉。

includes 判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回 false。

function func(name) {
  let list = ['ye', 'yi', 'shang', 'ying', 'yan'];
  if (list.includes(name)) {
    return 'self';
  }
  return 'other';
}
let nameStr = 'shang';
let res = func(nameStr);
console.log(res); // 'self'

只需要维护 list 数组即可,不需要不停增加判断条件。这个功能用法还挺常见常用的。

但是用了它,不代表代码可以一劳永逸,因为还有一种情况,不仅增加了判断条件,还增加了条件中需要判断的项。

另一种情况

某:其实我还有个困惑。

一:说说看。

某:有时候改了表单项的 name 值,表单 UI里改了,判断里忘记改了。

一:确实,分散的设置就会有漏改的风险。

某:这种情况也能集中处理?

一:当然。

某:键盘和膝盖双双奉上。

先简单描述一下需求,在一组用户信息中,如果当有订单产生的时候,部分用户信息不能修改。

一般情况下会把不能修改的信息的唯一 key 值放入 keyList 数组中,然后通过其 includes 进行判断。

  • 当 includes 的值是 true 的时候,当前信息类型的 disabled 值设置为 true。
let obj = [
  {
    key: 'name',
    value: 'ye',
  },
  {
    key: 'age',
    value: 18,
  },
  {
    key: 'speciality',
    value: 'tale telling',
  },
  {
    key: 'hobby',
    value: 'read',
  },
];
let keyList = ['speciality', 'hobby'];
let orderFlag = true;
obj.map(e => {
  if (orderFlag && keyList.includes(e.key)) {
    e.disabled = true;
  }
});
console.log(obj);

打印结果

业务功能探索之条件分支全覆盖,includes能否一劳永逸【玩转JavaScript】_条件判断

但是,由于种种原因,需要改动其中一个 key 值,但是判断的 keyList 数组中的值忘记修改了。这个时候,得到在最终结果就不准确了。

业务功能探索之条件分支全覆盖,includes能否一劳永逸【玩转JavaScript】_条件判断_02

这种情况可以换一种方式。

let obj = [
  {
    key: 'name',
    value: 'ye',
  },
  {
    key: 'age',
    value: 18,
  },
  {
    key: 'speciality',
    value: 'tale telling',
    editJudgeFlag: true, // 是否需要判断可以编辑的布尔值
  },
  {
    key: 'hobbys',
    value: 'read',
    editJudgeFlag: true, // 是否需要判断可以编辑的布尔值
  },
];
let orderFlag = true;
obj.map(e => {
  if (orderFlag && e.editJudgeFlag) {
    e.disabled = true;
  }
});
console.log(obj);

数组数据走配置化还是很方便的。不需要维护判断的 keyList 数组,直接为需要进行判断的元素添加 editJudgeFlag。

  • 当 editJudgeFlag 为 true 且满足订单判断条件时,当前信息类型的 disabled 值设置为 true。

打印结果

业务功能探索之条件分支全覆盖,includes能否一劳永逸【玩转JavaScript】_数组_03

总结

来说一下实验的结论:

  • 单一的条件判断,可以用 includes 实现。也可以用数组的 some 方法,可以凭个人喜好进行选择。
  • 如果数据是数组类型或者能重组成数组类型,走配置化更为方便。

实现思维方面的收获是:

正向和逆向这两个不同的思维面,也分享了开发过程中不错的功能联想。


作者:非职业「传道授业解惑」的开发者叶一一简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。如果看完文章有所收获,欢迎点赞

标签:判断,name,JavaScript,includes,let,玩转,key,true
From: https://blog.51cto.com/u_15838863/6974483

相关文章

  • Web前端大作业、基于HTML+CSS+JavaScript响应式个人相册博客网站
    ......
  • 【网工玩转自动化】深入浅出TextFSM 2022终极版
    《从零开始NetDevOps》是本人8年多的NetDevOps实战总结的一本书(且称之为书,通过公众号连载的方式,集结成册,希望有天能以实体书的方式和大家相见)。NetDevOps是指以网络工程师为主体,针对网络运维场景进行自动化开发的工作思路与模式,是2014年左右从国外刮起来的一股“网工学Python"的风......
  • JavaScript基础05
    函数参数的校验/***@判断参数是否为数字类型*@参数,一个参数*@返回值,如果参数是数字类型返回true,否则返回false*/functionisNumber(num){​ //1.第一版,把条件拆开判断​ //判断num是否是什么数据类型 if(typeofnum!=='number'){  console.log('num不是......
  • 看一家头部实干派互娱公司如何玩转DataOps?
    DataOps的概念自首次被提出至今已有8年,并在2018年被Gartner纳入数据管理技术成熟度曲线。从实施上看,当下DataOps仍处在发展初期,鲜少企业或团队能据此真正沉淀一套方法论或技术产品的体系。不过,随着越来越多的企业开启DataOps实践,相信令人“雾里看花”的DataOps方法体系也会逐渐明朗......
  • 记一次JavaScript异或算法加密 , 异或加密
     公司业务代码constBase64=require('base-64')functionxorEncrypt(str,key){letresultconstlist=[]for(leti=0;i<str.length;i++){constcharCode=str.charCodeAt(i)^key.charCodeAt(i%key.length)list.push(String.......
  • [Javascript] event target and currentTarget
    <Parent><child><button/></child></Parent>functiononClick(event){console.log('target:',event.target)//buttonconsole.log('currentTarget',event.currentTarget)//parent}pa......
  • 用 Python 自动创建 Markdown 表格 - 每天5分钟玩转 GPT 编程系列(4)
    目录1.他们居然问我要Prompts2.让GPT-4来写代码2.1我对DevChat说2.2DevChat回答2.3我又对DevChat说2.4DevChat的第二轮回答2.5我再次对DevChat说2.6DevChat回答2.7最后效果3.他们居然让我要写总结1.他们居然问我要Prompts早几天我用GPT-4写了一个Gol......
  • 使用 JavaScript 实现待办事项列表
    让我们通过每个步骤的代码块来完成实现基本待办事项列表的步骤:1.设置HTML结构:2.设置待办事项列表的样式(可选):3.处理任务添加:4.显示任务:步骤3中的代码已涵盖此步骤。5.处理任务完成情况:6.处理任务删除:7.将任务存储在本地存储中(可选):8.重构和改进(可选):重构您的代码,使其更有......
  • JavaScript之变量
    一:变量的概述简单来说,变量就是一个装东西的盒子。二:变量在内存中的存储本质:变量是程序在内存中申请的一块用来存放数据的空间。类似我们酒店的房间,一个房间就可以看做是一个变量。三:变量的使用变量在使用时分为两步:1.声明变量2.赋值1.声明//声明变量varage;//声明一个名称为a......
  • 正则表达式在JavaScript的使用
    正则表达式引入:邮件格式的匹配介绍检查字符串是否符合某些规则使用规则基本语法:构造函数方式:let变量=newRegExp("正则表达式","匹配模式")(更灵活)字面量方式:let变量=/正则表达式/匹配模式(更方便)匹配模式(可以有多个,且顺序无所谓):i忽略大小写g全......