如何避免代码重复:JavaScript 问答网页优化实战

如何避免代码重复:javascript 问答网页优化实战

本文旨在解决在JavaScript问答网页开发中,因主题选择导致的代码重复问题。通过采用三元运算符和函数封装,我们将展示如何精简代码,提高可维护性,并为后续扩展提供更灵活的架构。核心在于动态确定数据源和选择项,从而避免为每个主题编写相似的代码块。

代码重复的危害与解决思路

在开发问答网页时,针对不同的主题(如生物、化学、物理)重复编写几乎相同的代码是常见的问题。 这种做法不仅增加了代码量,降低了可读性,而且在后期维护和扩展时容易出错。当需要添加新的主题或修改现有逻辑时,必须修改多处代码,增加了维护成本和风险。

解决这个问题的核心在于抽象出重复的逻辑,并使其能够根据不同的主题动态地调整行为。常用的方法包括:

使用三元运算符: 根据主题动态选择数据源(例如,问题数组)和选择的课程。函数封装: 将重复的代码块封装成函数,通过传递参数来实现不同的行为。数据驱动: 将主题、课程和问题数据存储在统一的数据结构中,通过配置来驱动页面的行为。

优化后的代码实现

以下代码展示了如何使用三元运算符来简化主题选择逻辑,从而减少代码重复。

立即学习“Java免费学习笔记(深入)”;

$(document).ready(function(){    $('.go-btn').on('click',function() {        var array = ($('#myTopic').val() == 'Biology' ? biologyQ : ($('#myTopic').val() == 'Chemistry' ? chemistryQ : physicsQ));        const lessonSelected = ($('#myTopic').val() == 'Biology' ? $('#myBiology').val() : ($('#myTopic').val() == 'Chemistry' ? $('#myChemistry').val() : $('#myPhysics').val()));        var lessonResult = $.grep(array, function(e){ return e.lesson == lessonSelected; });        {            const array = lessonResult;            function shuffle(array) {                for (let i = array.length - 1; i > 0; i--) {                    let j = Math.floor(Math.random() * (i + 1));                    let temp = array[i];                    array[i] = array[j];                    array[j] = temp;                }                return array;            };            const result = shuffle(array);            $('#q1').html(result[0].question);            $('#q2').html(result[1].question);            $('#q3').html(result[2].question);            var currentVal = $('#myNumber').val();            $('.selected').hide().slice(0, currentVal).show();        }    });});

这段代码的核心在于以下两行:

var array = ($('#myTopic').val() == 'Biology' ? biologyQ : ($('#myTopic').val() == 'Chemistry' ? chemistryQ : physicsQ));const lessonSelected = ($('#myTopic').val() == 'Biology' ? $('#myBiology').val() : ($('#myTopic').val() == 'Chemistry' ? $('#myChemistry').val() : $('#myPhysics').val()));

这里使用三元运算符根据用户选择的主题动态地选择对应的数据源 (biologyQ, chemistryQ, physicsQ) 和课程选择器 (#myBiology, #myChemistry, #myPhysics)。 这样,原本需要为每个主题编写的 if…else if…else 结构被简化为一行代码,大大提高了代码的可读性和可维护性。

进一步优化:函数封装

虽然使用三元运算符可以简化代码,但如果逻辑更加复杂,或者需要在多个地方重复使用相同的逻辑,那么将代码封装成函数会更加有效。

例如,可以将根据主题获取问题数组和课程选择器的逻辑封装成一个函数:

function getTopicData(topic) {  switch (topic) {    case 'Biology':      return { array: biologyQ, lessonSelector: '#myBiology' };    case 'Chemistry':      return { array: chemistryQ, lessonSelector: '#myChemistry' };    case 'Physics':      return { array: physicsQ, lessonSelector: '#myPhysics' };    default:      return { array: [], lessonSelector: '' };  }}

然后,在事件处理函数中使用这个函数:

$(document).ready(function(){    $('.go-btn').on('click',function() {        const topic = $('#myTopic').val();        const topicData = getTopicData(topic);        var array = topicData.array;        const lessonSelected = $(topicData.lessonSelector).val();        var lessonResult = $.grep(array, function(e){ return e.lesson == lessonSelected; });        {            const array = lessonResult;            function shuffle(array) {                for (let i = array.length - 1; i > 0; i--) {                    let j = Math.floor(Math.random() * (i + 1));                    let temp = array[i];                    array[i] = array[j];                array[i] = array[j];                array[j] = temp;                }                return array;            };            const result = shuffle(array);            $('#q1').html(result[0].question);            $('#q2').html(result[1].question);            $('#q3').html(result[2].question);            var currentVal = $('#myNumber').val();            $('.selected').hide().slice(0, currentVal).show();        }    });});

总结与注意事项

通过使用三元运算符和函数封装,我们可以有效地减少 JavaScript 问答网页开发中的代码重复,提高代码的可读性和可维护性。

注意事项:

在选择使用三元运算符还是函数封装时,需要根据实际情况进行权衡。 如果逻辑比较简单,可以使用三元运算符; 如果逻辑比较复杂,或者需要在多个地方重复使用,那么应该使用函数封装。在设计数据结构时,应该尽量保持统一,方便后续的扩展和维护。在编写代码时,应该注意代码的可读性,添加适当的注释,方便其他人理解和维护代码。

通过遵循这些原则,我们可以编写出高质量、易于维护的 JavaScript 代码,从而提高开发效率,降低维护成本。

以上就是如何避免代码重复:JavaScript 问答网页优化实战的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1572571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
实现侧边导航栏同时只展开一个子菜单
上一篇 2025年12月22日 14:43:19
如何避免代码重复:JavaScript 问答网页优化实践
下一篇 2025年12月22日 14:43:31

相关推荐

  • 《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!

    《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!

    备受期待的动作肉鸽续作《哈迪斯2》现已正式发售,开发商Supergiant Games再次带来惊艳之作。IGN为本作献上了罕见的10分满分评价,盛赞其卓越的设计与深度。游戏延续了希腊神话背景,深入挖掘冥界传说与神秘巫术,玩家将化身冥界公主,在奥林匹斯诸神的协助下,直面强大的时之泰坦,展开一场波澜壮阔…

    2026年8月27日 用户投稿
    000
  • 使用 Java 配合 Locale 动态 Switch 语句

    本文介绍了在 Java 中如何使用 `switch` 语句配合 `Locale` 实现动态的语言环境切换。由于 `switch` 语句的 `case` 标签必须是常量表达式,直接使用从 `ResourceBundle` 获取的值是不允许的。本文提供了两种解决方案:使用 `if-else if` 结构…

    2026年8月27日
    100
  • 软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!

    软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!

    株式会社phoenixx(总部位于东京都武藏野市,代表取缔役社长:坂本和则)宣布,旗下可爱风格夺旗对战游戏《果冻部队》(jelly troops)将于2025年9月18日(周四)在steam与nintendo switch™平台同步推出。 此外,官方也正式公布本作将参与于2025年7月18日(周五)…

    2026年8月27日 用户投稿
    100
  • 轻松集成OpenTelemetry:告别繁琐配置,拥抱高效监控!

    在构建复杂的分布式系统时,监控和追踪变得至关重要。但是,手动配置和集成各种监控工具往往是一个令人头疼的过程。OpenTelemetry旨在通过提供一套标准化的API和SDK来简化这一过程。 open-telemetry/opentelemetry 这个 Composer 元包,可以帮助你快速上手 O…

    用户投稿 2026年8月27日
    000
  • 2K正式发表《NBA 2K26》 9月5日发售

    2k正式发表《nba 2k26》,预定9月5日登陆ps5、ps4、xboxs、xbox one、switch2、switch、pc平台。 Shai Gilgeous-Alexander、Angel Reese、Carmelo Anthony分别担任标准版、WNBA版、超级巨星版封面人物。 以上就是2…

    2026年8月26日
    000
  • Windows中Loader Lock引起的死锁问题

    在程序开发中,常见的做法是将程序模块化,通常实现为动态链接库(dll)。在主程序启动时,可以通过隐式或显式的方式加载这些动态链接库。然而,在windows系统中,如果动态链接库的dllmain函数编写不当,可能会导致一些意想不到的bug,例如典型的loader lock死锁问题。这是一个许多wind…

    2026年8月26日
    000
  • 《提米拉纳国的好运公主与衰运骑士团》中文OP及初回特典公开

    《提米拉纳国的好运公主与衰运骑士团》中文OP及初回特典公开《提米拉纳国的好运公主与衰运骑士团》中文OP及初回特典公开《提米拉纳国的好运公主与衰运骑士团》中文OP及初回特典公开《提米拉纳国的好运公主与衰运骑士团》中文OP及初回特典公开

    杰仕登今日正式宣布,由idea factory与ichicolumn inc联手打造的乙女向恋爱冒险游戏《提米拉纳国的好运公主与衰运骑士团》中文版将登陆nintendo switch平台,并预定于2025年秋季发售。与此同时,官方也公开了中文版开场动画以及首批限定特典信息,为玩家揭开这段命运交织的旅…

    2026年8月26日 用户投稿
    000
  • 《幻想生活i》全球累计销量突破120万份

    《幻想生活i》全球累计销量突破120万份《幻想生活i》全球累计销量突破120万份《幻想生活i》全球累计销量突破120万份《幻想生活i》全球累计销量突破120万份

    level-5 宣布,《幻想生活i》全球销量已超过120万份,特别发布了纪念插图,并宣布switch2实体版将于8月7日正式发售。此外,拍照模式也将在本月内通过更新加入游戏内容。 以上就是《幻想生活i》全球累计销量突破120万份的详细内容,更多请关注创想鸟其它相关文章!

    2026年8月26日 用户投稿
    100
  • 《旧日飞车》正式版年底登陆多平台 PS5/NS试玩版公开

    《旧日飞车》正式版年底登陆多平台 PS5/NS试玩版公开《旧日飞车》正式版年底登陆多平台 PS5/NS试玩版公开《旧日飞车》正式版年底登陆多平台 PS5/NS试玩版公开《旧日飞车》正式版年底登陆多平台 PS5/NS试玩版公开

    astrolabe games近日宣布,旗下ea阶段备受好评的复古赛车游戏《旧日飞车》现已推出ps5与nintendo switch平台的试玩版,并同步释出全新主机版本宣传影片。本作预计将于2025年结束抢先体验阶段,正式推出完整版本,并将登陆pc与多个主机平台。正式版内容将全面升级,包括超过30辆…

    2026年8月26日 用户投稿
    100
  • 《歧路旅人0》新情报公开 游戏角色以及设施等

    《歧路旅人0》新情报公开 游戏角色以及设施等《歧路旅人0》新情报公开 游戏角色以及设施等《歧路旅人0》新情报公开 游戏角色以及设施等《歧路旅人0》新情报公开 游戏角色以及设施等

    se公布了hd-2d风格jrpg《歧路旅人》系列新作《歧路旅人0》,游戏将于12月4日登陆switch2 / ps5 / xbox series x|s / switch / ps4平台,pc版本则于12月5日上线。官方近日释出大量新情报,让我们一起来看看。 ·霸王帕蒂斯三世: 个性残暴的独裁君主,…

    2026年8月26日 用户投稿
    000
  • Window XP 源码泄露!网友发现隐藏功能和趣味细节

    Window XP 源码泄露!网友发现隐藏功能和趣味细节Window XP 源码泄露!网友发现隐藏功能和趣味细节Window XP 源码泄露!网友发现隐藏功能和趣味细节Window XP 源码泄露!网友发现隐藏功能和趣味细节

    阅读本文大约需要 3 分钟。 距离首个代号为 Whistler 的 Windows XP 版本发布,已有近 20 年的时间。 然而,最近,Twitter 用户 Albacore 分享了一些来自 Windows XP 泄露代码的隐藏功能。通过调整特定的注册表项,你可以解锁一些有趣的视图,并体验到之前未…

    2026年8月25日 用户投稿
    100
  • 我拿它来移动办公,偶尔打打游戏,丰富我的碎片时间

    我拿它来移动办公,偶尔打打游戏,丰富我的碎片时间我拿它来移动办公,偶尔打打游戏,丰富我的碎片时间我拿它来移动办公,偶尔打打游戏,丰富我的碎片时间我拿它来移动办公,偶尔打打游戏,丰富我的碎片时间

    掌机开源的今天,在更高性能的 cpu 加持下,游戏性能大幅度提升,让玩家拥有了一台无缝衔接电脑游戏的出色掌机设备,开启了碎片化时间进行 3a 大作游戏的序幕。但是很多的玩家初衷是玩游戏,但是掌机虽然拥有着手柄和按键,却又不完全仅能支撑游戏,所以让不少的玩家都能化身数码博主,对掌机进行了全方面的应用拓…

    2026年8月25日 用户投稿
    000
  • Bear 博客上的浅色/深色模式分步指南

    我最近使用偏好颜色方案媒体功能与 light-dark() 颜色函数相结合,在我的 bear 博客上实现了亮/暗模式切换。 我是这样做的。 第 1 步:设置 css css 在过去几年中获得了一些很酷的新功能,包括 light-dark() 颜色函数。此功能可让您为任何元素指定两种颜色 &#8211…

    2025年12月24日
    300
  • 利用CSS3编写类似iOS中的复选框及带开关的按钮的代码

    这篇文章主要介绍了使用css3编写类似ios中的复选框及带开关的按钮,需要的朋友可以参考下 checkbox多选 最近写了一个适合移动端的checkbox,如图: ps:中间的勾勾是iconfont,iOS风格的。 具体的HTML: 立即学习“前端免费学习笔记(深入)”; 默认未选中 默认选中 橘黄…

    2025年12月24日
    000
  • HTML如何实现条件判断_JavaScript逻辑控制应用【解析】

    JavaScript提供五种条件判断方法:一、if语句基础分支;二、if-else if-else多条件选择;三、switch匹配离散值;四、三元运算符简化单层赋值;五、逻辑运算符组合复杂条件。 如果您在HTML页面中需要根据特定条件动态显示内容或执行不同操作,则必须借助JavaScript来实现逻…

    2025年12月23日
    100
  • html如何写点击代码_编写HTML元素点击事件代码【事件】

    为HTML元素添加点击响应功能有五种方法:一、内联onclick属性;二、getElementById结合addEventListener;三、事件委托;四、JavaScript中直接赋值onclick;五、结合data属性实现多态响应。 如果您希望为HTML元素添加点击响应功能,则需要通过Java…

    2025年12月23日
    200
  • HTML如何实现图像替换_图文切换技术解析【方法】

    实现图像与文字动态切换有五种方法:一、CSS伪元素与属性选择器;二、JavaScript动态innerHTML替换;三、CSS类名切换配合display控制;四、picture元素响应式切换;五、Canvas绘制切换。 如果您希望在网页中实现图像与文字内容的动态切换,例如点击按钮后图片变为文字描述,…

    2025年12月23日
    000
  • 动态加载HTML头部资源URL指南

    本文旨在提供在html文档头部动态加载css和javascript资源的全面指南,特别关注如何根据`localstorage`变量等动态条件加载不同文件。文章将从解决`document.write`中模板字符串的正确使用方法入手,进而深入探讨更健壮、推荐的dom操作方法(如`document.cre…

    2025年12月23日
    000
  • html如何实现计算器_用HTML与JS实现计算器功能【功能】

    可通过纯HTML与JavaScript实现具备四则运算功能的计算器:构建语义化HTML结构,绑定事件处理点击逻辑,封装安全计算函数,支持键盘输入,并实现连续运算。 如果您希望在网页中嵌入一个具备基础四则运算功能的计算器,可以通过纯 HTML 结构配合 JavaScript 逻辑来实现。以下是构建该计…

    2025年12月23日
    300
  • 自定义HTML 控件:解决键盘事件冲突与精确控制播放

    控件:解决键盘事件冲突与精确控制播放” /> 本文深入探讨了如何自定义HTML “ 元素的默认键盘控制行为,特别是针对左右箭头键的播放时间调整。我们将解释为何单独使用 `event.preventDefault()` 可能无法完全阻止浏览器默认行为,并引入 `event.stop…

    2025年12月23日
    300

发表回复

登录后才能评论
关注微信