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

本文主要是介绍掌握JavaScript的练习之道:十个手写函数让你信手拈来!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

当涉及到练习JavaScript函数时,有许多不同的函数可以学习和实现。以下是十个常见的手写JavaScript函数,可以作为练习的绝佳选择:

  1. 数组求和
function sumArray(arr) {return arr.reduce((total, num) => total + num, 0);
}

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

  1. 颠倒字符串
function reverseString(str) {return str.split('').reverse().join('');
}

代码 str.split('').reverse().join('') 的作用是将字符串 str 反转。

下面是对每个方法的解释:

  1. split(''): 这个方法将字符串 str 拆分成一个字符数组。通过传递空字符串 '' 作为分隔符,字符串中的每个字符都会成为数组中的一个元素。

    例如,对于字符串 'Hello'split('') 的结果将是 ['H', 'e', 'l', 'l', 'o']

  2. reverse(): 这个方法用于反转数组中的元素顺序。它会改变原始数组,将数组中的第一个元素变为最后一个元素,第二个元素变为倒数第二个元素,以此类推。

    例如,对于数组 ['H', 'e', 'l', 'l', 'o']reverse() 的结果将是 ['o', 'l', 'l', 'e', 'H']

  3. join(''): 这个方法将数组中的所有元素按照指定的分隔符连接成一个字符串。通过传递空字符串 '' 作为分隔符,元素之间不会有任何字符间隔。

    例如,对于数组 ['o', 'l', 'l', 'e', 'H']join('') 的结果将是 'olleH'

综合起来看,str.split('').reverse().join('') 的实际效果是将字符串 str 反转,并返回反转后的字符串。

例如,对于字符串 'Hello',这行代码将返回 'olleH'
在这里插入图片描述

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

在这里插入图片描述

  1. 数组去重
function removeDuplicates(arr) {return [...new Set(arr)];
}

代码 [...new Set(arr)] 的作用是从数组 arr 中去除重复的元素,并返回一个由非重复元素组成的新数组。

下面是对代码中的每个部分的解释:

  1. Set: Set 是 JavaScript 中的一种数据结构,它允许你存储唯一的值,这意味着集合中不会有重复的元素。当你使用 new Set() 创建一个新的 Set 对象时,它将包含从 arr 中的元素创建的一组唯一值。

  2. new: new 关键字用于创建 Set 对象的实例。

  3. [...]: 这是扩展运算符(Spread Operator),它用于将一个可迭代对象(如数组)展开为独立的元素。在这个代码片段中,它将 Set 对象转换为一个数组。

综合起来看,[...new Set(arr)] 的效果是将数组 arr 转换为一个 Set 对象以去除重复元素,然后将其转换回一个数组。最后,返回的数组中将包含 arr 中的非重复元素。

例如,对于数组 [1, 2, 2, 3, 3, 4, 5, 5],这行代码将返回 [1, 2, 3, 4, 5],去除了重复的元素。
在这里插入图片描述

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

在这里插入图片描述

  1. 斐波那契数列
function fibonacci(n) {if (n <= 1) {return n;}return fibonacci(n - 1) + fibonacci(n - 2);
}

这段代码实现了一个递归函数来计算斐波那契数列中第 n 个数的值。

下面是对代码的解释:

  1. if (n <= 1) { return n; }: 这是递归函数的终止条件。当 n 小于或等于 1 时,直接返回 n 的值。在斐波那契数列中,第一个数和第二个数都是 1,所以当 n 为 0 或 1 时,递归终止并返回相应的值。

  2. return fibonacci(n - 1) + fibonacci(n - 2);: 这是递归调用部分。当 n 大于 1 时,递归调用 fibonacci 函数来计算前两个数的和。fibonacci(n - 1) 表示计算第 n-1 个数的值,fibonacci(n - 2) 表示计算第 n-2 个数的值。然后将它们相加并返回结果。这样,递归会一直进行直到达到终止条件。

综合起来看,这段代码实现了一个递归函数来计算斐波那契数列的第 n 个数的值。通过不断递归调用自身并根据终止条件返回结果,可以计算出斐波那契数列中任意位置的数。

请注意,对于较大的 n 值,这种递归实现可能效率较低,因为它可能会进行重复的计算。在实际应用中,可以考虑使用循环或其他更高效的方法来计算斐波那契数列。
在这里插入图片描述

  1. 判断质数
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;
}

在这里插入图片描述

  1. 找出字符串中最长的单词
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的练习之道:十个手写函数让你信手拈来!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/243868

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo