掌握JavaScript的练习之道:十个手写函数让你信手拈来!

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》
当涉及到练习JavaScript函数时,有许多不同的函数可以学习和实现。以下是十个常见的手写JavaScript函数,可以作为练习的绝佳选择:
- 数组求和
function sumArray(arr) {return arr.reduce((total, num) => total + num, 0);
}

- 数组平均值
function averageArray(arr) {if (arr.length === 0) {return 0;}return sumArray(arr) / arr.length;
}

- 找出最大值
function findMax(arr) {return Math.max(...arr);
}

- 颠倒字符串
function reverseString(str) {return str.split('').reverse().join('');
}
代码 str.split('').reverse().join('') 的作用是将字符串 str 反转。
下面是对每个方法的解释:
-
split(''): 这个方法将字符串str拆分成一个字符数组。通过传递空字符串''作为分隔符,字符串中的每个字符都会成为数组中的一个元素。例如,对于字符串
'Hello',split('')的结果将是['H', 'e', 'l', 'l', 'o']。 -
reverse(): 这个方法用于反转数组中的元素顺序。它会改变原始数组,将数组中的第一个元素变为最后一个元素,第二个元素变为倒数第二个元素,以此类推。例如,对于数组
['H', 'e', 'l', 'l', 'o'],reverse()的结果将是['o', 'l', 'l', 'e', 'H']。 -
join(''): 这个方法将数组中的所有元素按照指定的分隔符连接成一个字符串。通过传递空字符串''作为分隔符,元素之间不会有任何字符间隔。例如,对于数组
['o', 'l', 'l', 'e', 'H'],join('')的结果将是'olleH'。
综合起来看,str.split('').reverse().join('') 的实际效果是将字符串 str 反转,并返回反转后的字符串。
例如,对于字符串 'Hello',这行代码将返回 'olleH'。

- 判断回文字符串
function isPalindrome(str) {const cleanedStr = str.toLowerCase().replace(/[\W_]/g, '');const reversedStr = reverseString(cleanedStr);return cleanedStr === reversedStr;
}

- 数组去重
function removeDuplicates(arr) {return [...new Set(arr)];
}
代码 [...new Set(arr)] 的作用是从数组 arr 中去除重复的元素,并返回一个由非重复元素组成的新数组。
下面是对代码中的每个部分的解释:
-
Set:Set是 JavaScript 中的一种数据结构,它允许你存储唯一的值,这意味着集合中不会有重复的元素。当你使用new Set()创建一个新的Set对象时,它将包含从arr中的元素创建的一组唯一值。 -
new:new关键字用于创建Set对象的实例。 -
[...]: 这是扩展运算符(Spread Operator),它用于将一个可迭代对象(如数组)展开为独立的元素。在这个代码片段中,它将Set对象转换为一个数组。
综合起来看,[...new Set(arr)] 的效果是将数组 arr 转换为一个 Set 对象以去除重复元素,然后将其转换回一个数组。最后,返回的数组中将包含 arr 中的非重复元素。
例如,对于数组 [1, 2, 2, 3, 3, 4, 5, 5],这行代码将返回 [1, 2, 3, 4, 5],去除了重复的元素。

- 统计字符串中某个字符出现的次数
function countOccurrences(str, char) {const regex = new RegExp(char, 'g');const matches = str.match(regex);return matches ? matches.length : 0;
}

- 斐波那契数列
function fibonacci(n) {if (n <= 1) {return n;}return fibonacci(n - 1) + fibonacci(n - 2);
}
这段代码实现了一个递归函数来计算斐波那契数列中第 n 个数的值。
下面是对代码的解释:
-
if (n <= 1) { return n; }: 这是递归函数的终止条件。当n小于或等于 1 时,直接返回n的值。在斐波那契数列中,第一个数和第二个数都是 1,所以当n为 0 或 1 时,递归终止并返回相应的值。 -
return fibonacci(n - 1) + fibonacci(n - 2);: 这是递归调用部分。当n大于 1 时,递归调用fibonacci函数来计算前两个数的和。fibonacci(n - 1)表示计算第n-1个数的值,fibonacci(n - 2)表示计算第n-2个数的值。然后将它们相加并返回结果。这样,递归会一直进行直到达到终止条件。
综合起来看,这段代码实现了一个递归函数来计算斐波那契数列的第 n 个数的值。通过不断递归调用自身并根据终止条件返回结果,可以计算出斐波那契数列中任意位置的数。
请注意,对于较大的 n 值,这种递归实现可能效率较低,因为它可能会进行重复的计算。在实际应用中,可以考虑使用循环或其他更高效的方法来计算斐波那契数列。

- 判断质数
function isPrime(num) {if (num < 2) {return false;}for (let i = 2; i <= Math.sqrt(num); i++) {if (num % i === 0) {return false;}}return true;
}

- 找出字符串中最长的单词
function longestWord(str) {const words = str.split(' ');let maxLength = 0;let longestWord = '';for (let i = 0; i < words.length; i++) {if (words[i].length > maxLength) {maxLength = words[i].length;longestWord = words[i];}}return longestWord;
}

这是一些练习手写JavaScript函数的例子,它们涵盖了不同的问题和技巧。当你逐步实现这些函数时,你会对JavaScript的函数和常用数据结构有更好的理解。
相关文章:
掌握JavaScript的练习之道:十个手写函数让你信手拈来!
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
买卖股票的最佳时机 II[中等]
优质博文:IT-BLOG-CN 一、题目 给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。返回你能获得…...
前端开发调试技巧:如何在Component下选中当前插件并且查看当前插件信息
在react开发项目中,在Component下选中组件,然后在控制台输$r 按回车键即可输出该组件信息。例如 $r.props输出该组件的props参数。例子详情见如下截图...
你是否还迷茫要不要学习Linux?
近几年Linux这个词好像很流行,无论是现实工作中,还是在网络信息中均可以听到或者看到有关Linux相关的内容,可以说Linux无处不在。说到这,有人可能会问了,我对Linux比较感兴趣,但是没有接触过Linuxÿ…...
leetcode(1)链表
# 1. 定义一个链表节点 class ListNode:def __init__(self, val0, next_nodeNone):self.val valself.next_node next_node# 2. 定义一个 node头节点 class LinkedList:def __init__(self):self.head None# 3.链表查找元素 get(index): def get_node(self, index)…...
spring boot Rabbit高级教程
消息可靠性 生产者重试机制 首先第一种情况,就是生产者发送消息时,出现了网络故障,导致与MQ的连接中断。 为了解决这个问题,SpringAMQP提供的消息发送时的重试机制。即:当RabbitTemplate与MQ连接超时后,…...
FTP的魅力:构建高效的文件传输基础
1 ftp介绍 1.1 ftp服务器安装 dnf install vsftpd-3.0.3-31.el8.x86_64 -y # 安装ftp服务 systemctl enable --now vsftpd # 启动ftp服务 systemctl stop --now firewalld.service # 关闭防火墙,允许客户端访问anonymous_enableYES #启动匿名用户访问功能1.2 客户…...
70、window11+visual studio2019+共享内存进行数据传输
基本思想:服务端和客户端 写共享内存 #include <windows.h> #include <iostream> using namespace std;HANDLE g_EventRead; // 读信号灯 HANDLE g_EventWrite; // 写信号灯 // 定义共享数据class Writer { public:Writer(const int buf_size, const wchar_t…...
SSTI模板注入(flask) 学习总结
文章目录 Flask-jinja2 SSTI 一般利用姿势SSTI 中常用的魔术方法内建函数 利用 SSTI 读取文件Python 2Python 3 利用 SSTI 执行命令寻找内建函数 eval 执行命令寻找 os 模块执行命令寻找 popen 函数执行命令寻找 importlib 类执行命令寻找 linecache 函数执行命令寻找 subproce…...
最近的工作和生活
大家好,我是记得诚。 聊一聊最近的工作和生活。 不知不觉在管理岗位,快干一年了。技术管理还是比较纯粹,主要还是以解决问题为主,对自己的考验也更大了,要关注更广的技术,也要专注更深的技术细节。 技术…...
第六节:Word中对象的层次结构
《VBA之Word应用》(10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后通过实例让…...
ARJ_DenseNet BMR模型训练
废话不多数,模型训练代码 densenet_arj_BMR.py : import timefrom tensorflow.keras.applications.xception import Xception from tensorflow.keras.applications.densenet import DenseNet169 from tensorflow.keras.preprocessing.image import Im…...
React之Hook
一、是什么 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是解决长时间使用和维护react过程中常遇到的问题,例如: 难以重用和共享组件中的与状态…...
OSG嵌入QT的简明总结2
正文 我之前在这篇博文《OSG嵌入QT的简明总结》中论述了OSG在QT中显示的可视化问题。其中提到官方提供的osgQt项目(地址:https://github.com/openscenegraph/osgQt )很久前已经更新了。但是我一直没有时间同步更新,最近重新尝试了…...
日常中msvcp71.dll丢失怎样修复?分享5个修复方法
在 Windows 系统中,msvcp71.dll 是一个非常重要的动态链接库文件,它承载了许多应用程序和游戏的运行。如果您的系统中丢失了这个文件,那么您可能会遇到无法打开程序、程序崩溃或出现错误提示等问题。本文将介绍 5 个快速修复 msvcp71.dll 丢失…...
【腾讯云TDSQL-C Serverless 产品体验】使用 Python向TDSQL-C添加读取数据实现词云图
关于TDSQL-C Serverless介绍 TDSQL-C 是腾讯云自主研发的新一代云原生关系型数据库。 它融合了传统数据库、云计算和新硬件技术的优势,100%兼容 MySQL,为用户提供具有极致弹性、高性能、高可用性、高可靠性和安全性的数据库服务。 TDSQL-C 实现了超过百万每秒的高吞吐量,支持…...
服务器感染了.360、.halo勒索病毒,如何确保数据文件完整恢复?
导言: 数据的安全性至关重要,但威胁不断进化,.360、.halo勒索病毒是其中的令人担忧的勒索软件。本文91数据恢复将深入介绍.360、.halo勒索病毒,包括其威胁本质、数据恢复方法和如何采取预防措施来保护您的数据。 如果受感染的数据…...
BAT028:批量将文件修改日期后缀更新为最新修改日期
引言:编写批处理程序,实现批量将文件修改日期后缀更新为最新修改日期。 一、新建Windows批处理文件 参考博客: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件,点击【…...
Visual Studio C++ 的 头文件和源文件
在Visual Studio C中,头文件(Header Files)和源文件(Source Files)是两种不同的文件类型,用于组织和管理C代码。 头文件(Header Files): 后缀名为.h或.hpp的文件…...
Scrapy框架中的Middleware扩展与Scrapy-Redis分布式爬虫
在爬虫开发中,Scrapy框架是一个非常强大且灵活的选择。在本文中,我将与大家分享两个关键的主题:Scrapy框架中的Middleware扩展和Scrapy-Redis分布式爬虫。这些主题将帮助你更好地理解和应用Scrapy框架,并提升你的爬虫开发技能。 …...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
在Spring Boot中集成RabbitMQ的完整指南
前言 在现代微服务架构中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件,支持多种消息协议,具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...
【2D与3D SLAM中的扫描匹配算法全面解析】
引言 扫描匹配(Scan Matching)是同步定位与地图构建(SLAM)系统中的核心组件,它通过对齐连续的传感器观测数据来估计机器人的运动。本文将深入探讨2D和3D SLAM中的各种扫描匹配算法,包括数学原理、实现细节以及实际应用中的性能对比,特别关注…...
LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...
