JavaScript(ES6)逻辑判断条件优化

海康线扫相机平场矫正教程 1、白纸准备确保视野中有一张平整且无折痕的白纸,使其完全铺满相机的整个视野。2、行高设置将行高参数设定为 2048。3、灰度值控制相机端图像的灰度值应维持在 120 - 160 这个区间内。同时,最亮像素点与最暗像素点的灰度值差值不得超过 4 倍。在调整灰度值时,尽量开启增益功能。4、 图像模糊处理为减少白纸对平场矫正的影响,需将相机端获取的图像进行模糊化处理。具体操作是对镜头进行虚焦,使整体图像变得模糊。 阅读详情

javascript-判断(if…else…)优化


1、使用Array.includes

function test(fruit){
    if(fruit == 'apple' || fruit == 'watermelon') {
        console.log('red')
    }
}

从上面的例子看,在判断的条件较少的时候,这种写法是没什么问题的,但是如果我们需要判断更多的红色水果,那么就需要更多的||操作符来拓展语句。

这时候可以使用Array.includes重写条件语句。

function test(fruit) {
  // 条件提取到数组中
  const redFruits = ['apple','strawberry','cherry','watermelon']
  if(redFruits.includes(fruit)){
    console.log('red')
  }
}
test('apple')

2、使用return语句减少if嵌套

  • 如果没有水果,抛出错误
  • 水果quantity参数,如果超过10,则打印信息
function test(fruit, quantity){
  const redFruits = ['apple','strawberry','cherry','watermelon']
  // 条件1,fruit必须有值
  if(fruit){
    // 条件2,必须为红色
    if(redFruits.includes(fruit)){
      console.log('red')
    }
    // 条件3,数量必须大于10
    if(quantity>10){
      console.log('big quantity')
    }
  }else {
    throw new Error('No fruit!')
  }
}
test(null) // No fruit
test('apple') // red
test('apple', 20) // red, big quantity

从上面的代码来看,首先一个if/else过滤无效条件,3层if语句嵌套。

用return改造,将无效的条件提前筛选出来。

function test(fruit, quantity){
  const redFruits = ['apple', 'watermelon','cherry','strawberry']
  if(!fruit) throw new Error('No fruit')
  if(redFruits.includes(fruit)){
    console.log('red')
  }
  if(quantity>10){ console.log('big quantity') }
  
}

或者

function test(fruit, quantity){
  const redFruits = ['apple','strawberry','cherry','watermelon']
  if(!fruit) throw new Error('No fruit!')
  if(!redFruits.includes(fruit)) return
  console.log('red')
  if(quantity>10){
    console.log('big quantity')
  }
}

3、函数的默认参数和解构

在函数中,我们经常要对null和undefined作出默认值的处理。

function test(fruit,quantity){
    if(!fruit) return;
    const q = quantity || 1;
    console.log(`We have ${q} ${fruit}!`)
}
test('banana') // We have 1 banana
test('apple', 2) // We have 2 apple

用es6的默认参数方式来改写,直接给函数参数分配一个默认值:

function test(fruit,quantity=1){
    if(!fruit) return;
    console.log(`We have ${q} ${fruit}!`)
}
test('banana') // We have 1 banana
test('apple', 2) // We have 2 apple

如果传入的参数为对象,是否可以指定默认参数呢?

function test(fruit){
    if(fruit && fruit.name) {
        console.log(fruit.name);
    } else {
        console.log('unknown')
    }
}
test(undefined) // unknown
test({}) //unknown
test({name:'apple',color:'red'}) // apple

我们想要的是如果 fruit.name 存在则打印水果名称,否则将打印 unknown 。我们可以使用默认函数参数和解构(destructing) 来避免 fruit && fruit.name 这样的检查。

// 只获得name属性
// 参数默认分配空对象
function test({name}={}){
   console.log(name || 'unknown')
}
test(undefined) // unknown
test({}) //unknown
test({name:'apple',color:'red'}) // apple

由于我们只需要来自 fruit 的 name 属性,我们可以使用 {name} 来解构参数,然后我们可以在代码中使用 name 作为变量来取代fruit.name。

我们还将空对象 {} 指定为默认值。 如果我们不这样做,你将在执行行测试时遇到test(undefined) – Cannot destructure property name of ‘undefined’ or ‘null’.(无法解析’undefined’或’null’的属性名称)。 因为 undefined中 没有 name 属性

4、Map/Object替代switch

function test(color) {
// 使用 switch case 语句,根据颜色找出对应的水果
    switch (color) {
        case 'red':
            return ['apple', 'strawberry'];
        case 'yellow':
            return ['banana', 'pineapple'];
        case 'purple':
            return ['grape', 'plum'];
        default:
            return [];
    }
}
//测试结果
test(null); // []
test('yellow'); // ['banana', 'pineapple']

用object字面量可以实现相同的结果,减少代码量。

const fruitColor = {
    red: ['apple','strawberry'],
    yellow: ['banana','pineapple'],
    purple: ['grape', 'plum']
 }
 function test(color){
    return fruitColor[color] || []
 }
}

用Map的实现方式:

const fruitColor = new Map()
    .set('red', ['apple', 'strawberry'])
    .set('yellow', ['banana', 'pineapple'])
    .set('purple', ['grape', 'plum']);
function test(color) {
    return fruitColor.get(color) || [];
}

对于上面的示例,还可以使用Array.filter来实现:

const fruits = [
    { name: 'apple', color: 'red' }, 
    { name: 'strawberry', color: 'red' }, 
    { name: 'banana', color: 'yellow' }, 
    { name: 'pineapple', color: 'yellow' }, 
    { name: 'grape', color: 'purple' }, 
    { name: 'plum', color: 'purple' }
];
function test(color) {
    // 使用 Array filter  ,根据颜色找出对应的水果
    return fruits.filter(f => f.color == color); // 返回的是一个数组
}

5、Array.every 和 Array.some 来处理全部/部分满足条件

const fruits = [
    { name: 'apple', color: 'red' },
    { name: 'banana', color: 'yellow' },
    { name: 'grape', color: 'purple' }
];
function test() {
    let isAllRed = true;
    // 条件:所有的水果都必须是红色
    for (let f of fruits) {
        if (!isAllRed) break;
        isAllRed = (f.color == 'red');
    }
    console.log(isAllRed); // false
}

使用Array.every,这个数组全满足某条件

const fruits = [
    { name: 'apple', color: 'red' },
    { name: 'banana', color: 'yellow' },
    { name: 'grape', color: 'purple' }
];
function test() {
    // 条件:简短方式,所有的水果都必须是红色
    const isAllRed = fruits.every(f => f.color == 'red');
    console.log(isAllRed); // false
}

使用Array.some,这个数组是否有一个满足条件

const fruits = [
    { name: 'apple', color: 'red' },
    { name: 'banana', color: 'yellow' },
    { name: 'grape', color: 'purple' }
];
function test() {
    // 条件:简短方式,所有的水果都必须是红色
    const isAnyRed = fruits.some(f => f.color == 'red');
    console.log(isAnyRed); // true
}
YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS 本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。 阅读详情

相关推荐

DDR4协议规范之(一)DDR4结构和寻址

DDR4 SDRAM结构和寻址DDR4 SDRAM的封装和寻址新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 DDR4 SDRAM的封装和寻址 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习

YJFeiii的博客 3万+

利用ES6 编写更好的条件语句

使用 Array.includes 来处理多个条件 请看下面的列子: // condition function test(fruit) { if (fruit == 'apple' || fruit == 'strawberry') { console.log('red'); } } 上面的列子看起来似乎没有什么问题。但是,如果我们还有更多的红色水果呢?是否要...

技术改变世界 1422

基于USB总线的虚拟摄像头(UVC)原理简介

前面文章中我们分析了虚拟声卡的实现,在文章中我们展示了创建一个虚拟麦克风和虚拟扬声器的技术原理。完成了音频的虚拟化之后,这里就要谈论一下对于视频的虚拟化了——虚拟摄像头的实现。关于虚拟麦克风和虚拟扬声器的实现,可以参考。虚拟摄像头应用也是非常普遍的,例如云桌面远程摄像头的实现,直播技术。目前对于虚拟摄像头有三种实现方式:DirectShow虚拟摄像头,这个是一种比较古老的技术;在新版本应用中,该项技术基本失效了,尤其是UWP框架程序,DirectShow虚拟摄像头就失效了。

tianxilink的博客 5413

js--ES6减少if...else...拿捏小技巧

减少if......else...技巧

前端小菜鸟的成长记录 703

从solidworks导出URDF模型

一、下载sw_urdf_exporter插件 ROS目前提供了SolidWorks转URDF的插件,叫做sw_urdf_exporter,从http://wiki.ros.org/sw_urdf_exporter下载sw2urdfSetup.exe文件,下载后点击安装,安装完成后就能在solidworks中导出URDF模型了。 二、创建solidworks模型 下面以较为简单的四轮小车为例进行说...

weixin_45168199的博客 4万+

2025认证杯数学建模第二阶段B题完整论文(代码齐全):谣言在社交网络上的传播

这需要我们深入理解抽样检测所得的次品率的不确定性及其对生产决策的影响。对于问题二的决策分析,我们可将其细分为四个关键的决策节点,分别是零件 1 的质量检测、零件 2 的质量检测、成品的质量检测,以及成品检测不合格时的拆解处理。该策略的实施,保证了在算法迭代过程中,表现最为优异的个体能够得到保留,并顺利传递至下一代,从而保障了算法在寻求最优解过程中的收敛性和优化效果。因此,我们采用假设检验的方法,将次品分布构造成 t 分布,从而确定在相应置信度的条件下,抽样次数 n 和次品数 k 所需满足的要求。

2301_81596622的博客 1007

ES6中用&&与||来简化if{}else{}写法

1.if{}else{}写法 const o = {v: 100}; if (o) { console.log('有值:' + v.o) } else { console.log('无值') } 如果传入的对象为非空,则打印对象的属性值;否者无输出值。 2.ES6中用&&与||用法 const o = {v: 100}; const t = o && o.v; // 100 const b = false; const t1 = b || '10

u010565037的博客 2295

五步通关!宝塔Linux部署ASP.NET Core的魔法秘籍大公开!

摘要: 本文提供ASP.NET Core应用五步部署攻略,涵盖从环境配置到线上运行的完整流程: 1️⃣ 环境准备:安装宝塔面板、ASP.NET Core运行时及开放端口; 2️⃣ 应用发布:通过dotnet publish生成独立部署包并上传服务器; 3️⃣ Nginx配置:设置反向代理将域名请求转发至应用端口; 4️⃣ 进程守护:使用Supervisor确保应用持续运行; 5️⃣ HTTPS加密:通过宝塔快速申请SSL证书并解决验证路径冲突。 关键点: 强调权限设置(755)、端口开放及反向代理细节; 提

java专栏 968

代码整洁之道--直击痛点

都2022了,不会还有人不会用es6吧,不会吧不会吧直击痛点痛点1:if else直接拉满优化方案1:switch优化方案2:Object优化方案3:Map (终于可以写es6了,巨鸡冻)痛点2: 判断一些不确定的值优化方案1: ??空值合并运算符优化方案2:?.可选链接运算符之后再补充,未完待续??? 直击痛点 痛点1:if else直接拉满 当你接手一个别人开发新项目时,总会遇到页面 if (xxx) { //做些什么 } else if (xxx) { //做些什么 } else if (xxx

Hassan的小博客! 1227

Opencv计算机视觉PPT-算法篇

01 02 03 04 05 06 07 08 09 010 011 012 013 014 015 016 017 018

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 203

Android Input——输入系统介绍(一)

Input 系统对于提供流畅、灵敏和一致的用户交互体验至关重要,它需要在不同的设备、场景和应用中保证输入事件的正确性、及时性和安全性。Android 输入系统是一个复杂但高效的设计,旨在处理来自各种输入设备(如触摸屏、键盘等)的用户交互,并将这些交互转换为应用程序可以理解和响应的形式。EventHub:输入系统的最底层,直接与硬件通信,监听和读取输入设备的原始事件。:从 EventHub 获取原始输入事件,对其进行解析,转化为更高层次的事件,以便上层应用或服务能够理解。

小旭的专栏 1708

04-ES6语法、事件监听和条件判断

1、ES6语法 var和let 在ES6之前,我们不管是变量还是常量都使用var来定义,这种设计很不合理,存在很大的缺陷,因为它没有块级作用域的概念,什么是块级作用域呢?就是一个变量它可以作用的范围,没有块级作用域会产生什么后果呢?我们来看下面的代码: <body> <button>点击</button> <button>点击</button> <button>点击</button> <button&g

ilove_story的博客 1469

Linux性能调优之CPU时间分布(亲和性、带宽、权重)配置

带宽权重亲和性进程级别Cgroup-v2服务级别systyemd我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼·黑塞《德米安》

山河已无恙 1709

js优化判断条件

一般在遇到复杂逻辑判断时,第一时间想到的处理方案是用if/else/switch等来实现多个条件判断逻辑处理,但是随着判断条件的增多,代码中的判断条件会越来越来越臃肿,越来越不可读不可维护。

Seveny07的博客 221

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JavaScript 复杂判断的更优雅写法

转自:https://juejin.im/post/5bdfef86e51d453bf8051bf8 前提 我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃肿,越来越看不懂,那么如何更优雅的写判断逻辑,本文带你试一下。 举个例子 先看一段代...

yingzizizizizizzz的专栏 270

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

编写高质量可维护的代码之优化逻辑判断

编写高质量可维护的代码之优化逻辑判断前言JavaScript 语法篇试试 Array.includes ~函数默认值策略模式优化分支逻辑处理框架篇之 React JSX 逻辑判断优化If 标签For 标签With 标签 这里是转载于掘金上看到的文章 转载地址:https://juejin.im/post/6859125809655840776 作者:政采云前端团队 前言 if else、switch case 是日常开发中最常见的条件判断语句,这种看似简单的语句,当遇到复杂的业务场景时,如果处理不善,就会出

yjl23332的博客 442

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JS中every()和some()的用法

every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true。 some()是对数组中每一项运行给定函数,如果该函数对任一项返回true,则返回true。   every一旦找到一个是false的就不往下走了,就直接返回false some 一旦找到一个true就不往下走了,就返回true   every,some后面跟着的是一个函数。 我们可以使用es6...

肖肖肖丽珠的博客 3470

JavaScript基础==>ES6扩展

一、对象操作 Object.assign.(obj, objitem) Object.assgin() //es6方法 将源对象合并到目标对象 Object.assign 在 对象只有一层时为深度克隆 否则 为浅克隆 Object.assign(newObj,a,b,c) // 第一个参数是个对象后面都是源对象也就是被合并的对象 ......

weixin_46037781的博客 1501

JavaScript 优化判断条件

一、前奏: 我们一般在遇到复杂逻辑判断时,第一时间想到的处理方案是用if/else/switch等来实现多个条件判断逻辑处理,但是随着判断条件的增多,代码中的判断条件会越来越来越臃肿,越来越不可读不可维护,下面探讨如何更优雅的写判断逻辑。 1、if/else方式: 如键盘按键 const publicKeyboardShortcuts = (evt: KeyboardEvent) => { if(evt.keyCode == 1){ onKeyDownActive('o

weixin_42333548的博客 1980

dev gridcontrol summaryitem如何加条件_JavaScript 优化判断条件

一、前奏:我们一般在遇到复杂逻辑判断时,第一时间想到的处理方案是用if/else/switch等来实现多个条件判断逻辑处理,但是随着判断条件的增多,代码中的判断条件会越来越来越臃肿,越来越不可读不可维护,下面探讨如何更优雅的写判断逻辑。1、if/else方式: 如键盘按键 const publicKeyboardShortcuts = (evt: KeyboardEvent) =&gt...

weixin_36398921的博客 319

JS代码优化——逻辑判断

js代码优化——逻辑判断优化

wujianyouhun的专栏 748

常见的逻辑判断优化技巧

if else、switch case 是日常开发中最常见的条件判断语句,这种看似简单的语句,当遇到复杂的业务场景时,如果处理不善,就会出现大量的逻辑嵌套,可读性差并且难以扩展。编写高质...

frontend_frank的博客 1368

ES6数组some与every方法:gh_mirrors/es/es6features项目解析

你是否还在为数组判断逻辑编写冗长的for循环?是否在验证数组元素时难以保持代码简洁?本文将通过gh_mirrors/es/es6features项目解析,带你掌握ES6数组中some与every这两个高效方法,彻底告别繁琐的循环判断。读完本文,你将能够:理解some与every的核心差异、掌握实际应用场景、解决常见判断难题、编写更优雅的JavaScript代码。 ## 项目背景与核心价值 gh...

gitblog_00217的博客 944

代码性能优化之优化逻辑判断

编写高质量可维护的代码之优化逻辑判断 if else、switch case 是日常开发中最常见的条件判断语句,这种看似简单的语句,当遇到复杂的业务场景时,如果处理不善,就会出现大量的逻辑嵌套,可读性差并且难以扩展。 下面我们会分别从 JavaScript 语法和 React JSX 语法两个方面来分享一些优化的技巧。 JavaScript 语法篇 嵌套层级优化 function supply(fruit, quantity) { const redFruits = ['apple', 'strawbe

qq_45547674的博客 716

【JS】你不知道的ES6 (一)

链判断运算符 ES5 我们判断一个深层级的对象是否有某一个 key 需要一层一层去判断,现在我们可以通过?.的方式去获取 // es5 // 错误的写法(当某一个key不存在undefined.key就会代码报错) const firstName = message.body.user.firstName; // 正确的写法 const firstName = (message && message.body && message.body.user &am.

YzzHA 的博客 353

【2021 第一期】日常开发 26 个常见的 JavaScript 代码优化方案

大伙儿好~,我是小鹿,公众号:「小鹿动画学编程」 原创作者。 时隔半年我又回来了,期间发生了很多事情。从大学刚毕业来到一线找工作,也由于今年出现的特殊情况,掘金断就更了一段时间。嗯~,就不给自己找借口啦。现在全部安顿好了,把精力开始慢慢回归到写作上,希望在 2021 新的一年和大伙儿一起在掘金成长! 2021 第一期。 本篇文章整理了在日常开发中 30 个常见的 JavaScript 代码优化方案。 本文章已在 Github blog 收录,欢迎大伙儿~ Star,文章中若存在不足或者 issues.

小鹿动画学编程 1万+
上一篇: 页面中多个script块之间的关系
下一篇: 计算机专业术语对照
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值