首页 > 其他分享 >再也没有ifelse

再也没有ifelse

时间:2024-04-01 19:36:51浏览次数:25  
标签:const letter 没有 find grade ifelse 数组 再也 minpercent

再也没有if else

例子1


const setBackgroundColor = (colorName) => {
	let colorCode = '';
	switch(colorName) {
		case 'blue':
			colorCode = '#2196F3';
			break;
		case 'green':
			colorCode = '#4CAF50';
			break;
		case 'orange':
			colorCode = '#FF9800';
			break;
		case 'pink':
			colorCode = '#E91E63';
			break;
		default:
			colorCode = '#f44336';
	};
	document.body.style.backgroundColor = colorCode;
};

换个实现方式

const colorCodes = {
	'blue'   : '#2196F3',
	'green'  : '#4CAF50',
	'orange' : '#FF9800',
	'pink'   : '#E91E63',
	'default': '#F44336'
};

const setBackgroundColor = (colorName) => {
	document.body.style.backgroundColor = colorCodes[colorName]
		? colorCodes[colorName]
		: colorCodes['default'];
};

例子2

const gradeChart = [
	{minpercent: 90, letter: 'A'},
	{minpercent: 80, letter: 'B'},
	{minpercent: 70, letter: 'C'},
	{minpercent: 60, letter: 'D'},
	{minpercent: 0,  letter: 'F'}
];

const getLetterGrade = (gradeAsPercent) => {
	const grade = gradeChart.find(
		(grade) => gradeAsPercent >= grade.minpercent
	);

	return grade.letter;
};

这段代码定义了一个JavaScript函数和一个数据结构,用于将百分制成绩转换为对应等级(A、B、C、D或F)。

首先,我们来看gradeChart数组:

const gradeChart = [
  {minpercent: 90, letter: 'A'},
  {minpercent: 80, letter: 'B'},
  {minpercent: 70, letter: 'C'},
  {minpercent: 60, letter: 'D'},
  {minpercent: 0,  letter: 'F'}
];

这是一个包含多个对象的数组,每个对象代表一个成绩等级区间。例如:

  • 如果分数在90分及以上,则对应的等级是'A'。
  • 如果分数在80到89分之间,则对应的等级是'B'。
  • 以此类推,直到分数在0到59分之间时,对应的等级是'D';而任何低于或等于0的分数,其等级为'F'。

接下来,我们看getLetterGrade函数:

const getLetterGrade = (gradeAsPercent) => {
  const grade = gradeChart.find(
    (grade) => gradeAsPercent >= grade.minpercent
  );

  return grade.letter;
};

这个函数接收一个参数 gradeAsPercent,表示要转换的成绩(以百分比形式)。函数内部使用了Array.prototype.find()方法来查找gradeChart数组中第一个满足条件的对象,这里的条件是传入的分数大于等于当前对象中的minpercent属性。

如果找到了符合条件的区间(即找到对应的成绩等级),则返回该区间对象的letter属性值,也就是对应的字母等级。

举个例子,调用getLetterGrade(85)会返回 'B',因为85在80到89的区间内,对应的是'B'等级。

为什么不用ifelse?

在讨论Array.prototype.find()方法与使用传统的if-else语句进行查找时的效率,这个问题的答案会根据具体的上下文和数据结构有所不同。

对于数组查找:

  1. Array.prototype.find()

    • find()方法在内部实现上会遍历数组直到找到匹配项为止。如果数组很大且目标元素出现在数组靠前的位置,则效率相对较高。但如果目标元素位于数组末尾或根本不存在于数组中(需要遍历整个数组),那么效率较低。
    • 它的优势在于代码简洁,并且内置了循环机制,避免了手动编写循环逻辑的复杂性。
  2. if-else 用法

    • 使用传统的for循环配合if-else条件判断也可以达到同样的效果。在较小规模的数据量下,二者性能差距可能并不明显。
    • 如果手动优化循环,例如在找到结果后立即跳出循环(如使用break),则在最坏情况下可能会比find更高效,因为它可以提前结束搜索过程。

结论:

  • 在处理小到中等规模的数组时,两者在性能上的差异通常不显著。
  • 对于非常大的数组,如果你知道要查找的目标通常靠近数组开头或者有可能频繁出现的情况,find方法由于其内建迭代器的特性,在平均情况下的性能表现良好。
  • 当需要查找特定条件并希望尽快结束循环时,手动编写的、能够提前终止循环的if-else结构可能会提供更好的最坏情况下的性能。

然而,在实际编程实践中,我们不仅要考虑纯粹的运行时间效率,还要关注代码的可读性和维护性。在这种场景下,find方法通常因其简洁和易读而受到青睐,特别是在处理对象数组寻找满足特定条件的元素时。



欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。

公众号

Don’t reinvent the wheel, library code is there to help.

文章来源:刘俊涛的博客


若有帮助到您,欢迎点赞、转发、支持,您的支持是对我坚持最好的肯定(_)

标签:const,letter,没有,find,grade,ifelse,数组,再也,minpercent
From: https://www.cnblogs.com/lovebing/p/18109205

相关文章

  • MSSQLServer dbo没有智能提示/红色报错波浪线
    使用SQLServer的时候碰到了一个问题,就是已经在[24_3_25]中创建了temp1表,但是左侧对象资源管理器窗口中没显示,而且没有输入提示,还有红色报错波浪线。如图所示解决方法:资源管理器没显示选中“表”选择刷新对于报错波浪线和没提示的问题看看是否是因为开启智能提示点击......
  • 真是受不了了,连个标准的H5页面都找不到!!!希望网络上各个网站的管理员删一删那些没有
    <!DOCTYPEhtml><htmllang="en"><head><!--网页的描述,关键词,文件的最后修改时间,作者及其他元数据。--><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0&q......
  • LiftPool:双向池化操作,细节拉满,再也不怕丢特征了 | ICLR 2021
    论文参考信号处理中提升方案提出双向池化操作LiftPool,不仅下采样时能保留尽可能多的细节,上采样时也能恢复更多的细节。从实验结果来看,LiftPool对图像分类能的准确率和鲁棒性都有不错的提升,而对语义分割的准确性更能有可观的提升。不过目前论文还在准备开源阶段,期待开源后的复现,特......
  • keil下划线改为光标细致方法(也适用没有硬件键盘情况)
    keil下划线改回光标(没有硬件键盘方法)作者:closer按“insert”切换光标。笔记本的insert可能被占用,调用电脑的软键盘。方法如下:shift+Ctrl+k打开搜狗的软键盘,点击左下脚的ins,即可切换回光标。换回光标。第一步:win+R打开运行对话框。第二步:输入osk,确定,即可以打开......
  • H5get请求重定向后页面没有跳转重定向的地址是什么问题;H5get请求重定向后页面不跳转自
    Ajax请求的处理:如果使用了XMLHttpRequest或FetchAPI进行GET请求,并通过异步处理来获取响应数据,那么浏览器不会自动跳转到重定向的地址。如果在H5的GET请求中,服务器返回了重定向响应(HTTP状态码为3xx),但页面没有跳转到重定向的地址,可能有几种可能的原因:JavaScript......
  • 20240328,位运算,可变数组,链表(我是真的没有听懂)
    位运算一,按位运算按位运算,把整数当作2进制的数字进行运算?&按位与,|按位或,~按位取反,^按位的异或,<<左移, >>右移1.1&按位与·如果(x)i==1并且(y)i==1,那么(x&y)=1否则的话(x&y)i=0按位与常用于两种应用:·让某一位或某些位为0:  x&0xFE·取一个数中的一段: x&......
  • 【LeetCode】1607. 没有卖出的卖家
    题目表:Customer+---------------+---------+|ColumnName|Type|+---------------+---------+|customer_id|int||customer_name|varchar|+---------------+---------+customer_id是该表具有唯一值的列。该表的每行包含网上商城的每一位顾客的......
  • linux虚拟机没有ip,网卡服务无法启动的解决
    最近使用虚拟机做实验,挂起虚拟机后再回复,发现经常无法使用xshell连接。进入虚拟机后,使用ifconfig命令查看网卡状态,发现网卡的ip没有了[root@host103~]#ifconfigens33      重启网卡,发现报错。查看网卡目录,也就只有这一个网卡文件,也就是不存在其他网卡配置错......
  • 可能是迄今为止最好用的WPF加载动画功能(没有之一)
    前言当我们在开发应用程序时,用户体验往往是至关重要的一环。在应用程序加载大量数据或执行复杂操作时,为用户提供一个良好的加载体验变得至关重要。加载动画是其中一个有效的方式,它不仅能够告知用户应用程序正在进行工作,还能够缓解用户在等待过程中的焦虑感。一.需求分析 ......
  • mysql统计所有分类下的数量,没有的也要展示
    要求统计所有分类下的数量,如果分类下没有对应的数据也要展示。这种问题在日常的开发中很常见,每次写每次忘,所以在此记录下。这种统计往往不能直接groupby,因为有些类别可能没有对应的数据这里有两个思路(如果您有更好的方法,请一定要告诉我,求求了):每种类型分别统计,用union连接......