news 2026/8/7 12:18:50

算法刷题 JavaScript 工具手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法刷题 JavaScript 工具手册

文章目录

  • 算法刷题 JavaScript 工具手册
  • 一、Array 数组常用操作
    • 1.1 尾部插入或者删除元素 push / pop
    • 1.2 头部插入或者删除元素 unshift/shift
    • 1.3 返回一个新数组 map
    • 1.4 过滤数组filter
    • 1.5 把数组压缩成一个值reduce
    • 1.6 原数组就地排序sort
    • 1.7 从数组中截取一段并返回新数组 slice
    • 1.8 插入替换删除原数组splice
  • 二、Map 映射常用操作
    • 2.1 创建一个映射
    • 2.2 添加一条映射 set
    • 2.3 根据 key 值找到 value get
    • 2.4 判断这条映射是否存在 has
    • 2.5 根据 key值删除这条映射 delete
    • 2.6 获取映射条数 size
    • 2.7 清空映射 clear
    • 2.8 遍历映射
  • 三、Set 映射常用操作
  • 四、Math 常用函数
    • 4.1 取整函数 Math.floor() 向下取整
    • 4.2 取整函数 Math.ceil() 向上取整
    • 4.3 四舍五入 Math.round()
    • 4.4 取最大值 取最小值 Math.max() Math.min()
    • 4.5 取绝对值 Math.abs()
  • 五、字符串操作
    • 5.1 获取字符串长度
    • 5.2 字符串是否包含某个字符
    • 5.3 字符串的截取
    • 5.4 字符串的替换,替换第一个和全局替换
    • 5.5 字符串分割 split
    • 5.5 字符串拼接 join
    • 5.6 大小写转换
    • 5.7 去空格

算法刷题 JavaScript 工具手册

一、Array 数组常用操作

1.1 尾部插入或者删除元素 push / pop

arr.push(x)// 尾部插入arr.pop()// 删除尾部

返回值:

  • push 返回的是数组的长度

  • pop 返回的是删除的那个元素

举例如下:

constarr=[1,2,3,4,5,6,7,8,9,10];console.log(arr);arr.push(11);console.log(arr);arr.pop();console.log(arr);console.log(arr.push(12));console.log(arr.pop());

输出结果如下:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ] [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 11 12
  • 首先加入 11,然后抛出 11,加入 12,打印的是数组的长度,值为 11,取到的抛出的元素 12

1.2 头部插入或者删除元素 unshift/shift

arr.unshift(x)// 头部插入arr.shift()// 删除头

返回值:

  • unshift 返回的是数组的长度

  • shift 返回的是删除的那个元素

举例如下:

arr.unshift(0);console.log(arr);arr.shift();console.log(arr);console.log(arr.unshift(-1));console.log(arr.shift());

输出结果如下:

[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 11 -1

1.3 返回一个新数组 map

arr.map(x=>x*2)

回调函数传入参数:

arr.map((item, index, array) => {})
参数含义
item当前元素
index当前下标
array原数组

举例说明:

constarr=[10,20,30]arr.map((item,index,array)=>{console.log(item,index,array)})

输出:

100[10,20,30]201[10,20,30]302[10,20,30]

思考:回调函数

也就是我们给 map 传入了一个函数,map 中帮我实现很多东西,而从拿到了某些参数,我们再使用

以普通函数为例的模拟:

functionmyMap<T,U>(arr:T[],callback:(item:T,index:number,array:T[])=>U):U[]{constresult:U[]=[]for(leti=0;i<arr.length;i++){constitem=arr[i]constmapped=callback(item,i,arr)result.push(mapped)}returnresult}
  • callback 就是那个函数,我们传入的函数就是对应给的这里
  • 因为这个只是普通函数的模拟,不考虑第一个传入的参数 原数组arr,真是实现使用了原型原型链,第一个参数arr 并不是作为参数传入,而是作为 this 绑定到函数内部

返回值:

  • 返回一个新数组

举例如下:

constarr1=[1,2,3];constarr2=arr1.map(x=>x*2);console.log(arr2);

输出结果如下:

[2,4,6]

1.4 过滤数组filter

传入参数:同 map

返回值:

  • 返回一个新数组

举例如下:

取一个数组的奇数,组成一个新的数组

constarr3=[1,2,3,4,5,6,7,8,9,10];constarr4=arr.filter(x=>x%2!=0);console.log(arr4);

输出结果如下:

[1,3,5,7,9]

filter 和 map 的区别?

return 的意义不同

举例来说:

constarr=[1,2,3,4]arr.map(x=>x>2)[false,false,true,true]arr.filter(x=>x>2)[3,4]只保存true

1.5 把数组压缩成一个值reduce

传入参数:

arr.reduce((acc, cur, index, array) => { return 新的acc }, 初始值)
参数含义
acc累加器(上一次的结果)
cur当前元素
index下标
array原数组

返回值:

  • 返回一个值,reduce 的返回值类型 = acc(累加器)的类型
  • 每一轮 return 的值 = 下一轮的 acc

举例如下:数组求和

constarr=[10,20,30];constresult=arr.reduce((acc,cur)=>{returnacc+=cur;},5);console.log(result);

输出结果如下:

65

1.6 原数组就地排序sort

默认是字典序排序:

[3, 1, 10, 2].sort() 结果是[1, 10, 2, 3]

传入参数:

arr.sort((a,b)=>...)
  • 传入一个比较函数,比较函数里面有两个参数(a,b),比较的是 a 和 b的相对顺序,类似于不断的拿出来两个值,不断比较
  • sort 的规则,sort 不关心类型,只关心你 return 的值是不是:负数 / 正数 / 0,意味着小的在前
  • < 0 → a 在前
  • > 0 → b 在前
  • = 0 → 不变
  • 根据 js 引擎,底层的使用什么排序算法不一定

返回值:

  • 返回就是原数组,因为修改是原地修改原数组

举例如下:

constarr=[8,5,1,2,3,66,44,55];arr.sort((a,b)=>a-b);console.log(arr);arr.sort((a,b)=>{returnb-a});console.log(arr);

输出结果如下:

[1,2,3,5,8,44,55,66][66,55,44,8,5,3,2,1]

1.7 从数组中截取一段并返回新数组 slice

传入参数

arr.slice(start,end)
参数含义
start起始下标(包含)
end结束下标(不包含)

返回值:

  • 返回新数组

举例如下:

constarr=[1,2,3,4,5]arr.slice(1,4)

输出结果如下:

[2,3,4]

从 index=1 开始(包含)到 index=4 结束(不包含)

常见用法:

1.复制数组

const copy = arr.slice() 等价于, const copy = [...arr]

2.截取到末尾

arr.slice(2)

从 index=2 到最后

3.取最后两个元素,负数 = 从后往前数

arr.slice(-2)

小练习:

const arr = [1, 2, 3, 4, 5] arr.slice(-3, -1) //结果是 数组长度为 5,-1 对应 4,-2 对应 3,-3 对应 2 arr.slice(-3, -1)就是arr.slice(2, 4) 包含 2 不包含4 [3,4]

1.8 插入替换删除原数组splice

传入参数:

arr.splice(start,deleteCount,...items)
  • start(从哪开始动手):开始操作的位置(下标)
  • deleteCount:删除几个元素
  • …items(可选):要插入的新元素,可以不写 / 写多个

返回值:

  • 注意原数组被修改

  • 被删除的元素数组

举例如下:

1.纯删除

arr.splice(1,2)// 从 index=1 开始,删 2 个

2.插入(不删除)

arr.splice(1,0,100)//在 index=1 插入 100

3.替换

arr.splice(1,1,99)1个 → 再放99

二、Map 映射常用操作

Map:一种“键值对集合”,但 key 可以是任意类型,Object 的 key 只能是string / symbol

初始化输入输出数据格式

[[key,value],[key,value]]

2.1 创建一个映射

constmap=newMap()

2.2 添加一条映射 set

map.set('a', 1) map.set('b', 2)

2.3 根据 key 值找到 value get

map.get('a') // 1

2.4 判断这条映射是否存在 has

map.has('a') // true

2.5 根据 key值删除这条映射 delete

map.delete('a')

2.6 获取映射条数 size

map.size// 元素个数

2.7 清空映射 clear

map.clear()

2.8 遍历映射

1.for…of

for(const[key,value]ofmap){console.log(key,value)}

2.forEach

map.forEach((value,key)=>{console.log(key,value)})
注意:value 在前,key 在后

三、Set 映射常用操作

set 初始化输入输出格式

[value,value,value]

使用方法同 Map

如何给数组去重?

constarr=[...newSet(nums)]

四、Math 常用函数

Math.max() Math.min() Math.abs() Math.floor() Math.ceil() Math.round()

4.1 取整函数 Math.floor() 向下取整

向更小的方向取整

Math.floor(3.9)// 3Math.floor(-3.1)// -4

4.2 取整函数 Math.ceil() 向上取整

向更大的方向取整

Math.ceil(3.1)// 4Math.ceil(-3.9)// -3 ❗

4.3 四舍五入 Math.round()

Math.round(3.5)// 4Math.round(3.4)// 3

4.4 取最大值 取最小值 Math.max() Math.min()

Math.max(1,5,3)// 5Math.min(1,5,3)// 1

4.5 取绝对值 Math.abs()

Math.abs(-5) // 5

五、字符串操作

首先明确,因为字符串是不可变的,所以返回的都是新值

5.1 获取字符串长度

str.length

5.2 字符串是否包含某个字符

'hello'.includes('e') // true

5.3 字符串的截取

[start, end) 左闭右开

'hello'.slice(1, 4) // 'ell'

5.4 字符串的替换,替换第一个和全局替换

  • replace 替换第一个
'hello'.replace('l', 'x') // 'hexlo'
  • 全局替换
'hello'.replaceAll('l', 'x') // 'hexxo'

5.5 字符串分割 split

返回值:

  • 字符数组
'a,b,c'.split(',') // ['a','b','c']

5.5 字符串拼接 join

['a','b','c'].join('-') // 'a-b-c'

组合使用实例:

'hello world'.split(' ').join('-') // 'hello-world'

5.6 大小写转换

str.toUpperCase() str.toLowerCase()

5.7 去空格

str.trim() // 两边 str.trimStart() // 左 str.trimEnd() // 右
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 12:17:48

基于MATLAB的螺旋天线全参数仿真与特性分析

目录 1.MATLAB Antenna Toolbox工具箱 2.螺旋天线的基础建模与结构可视化 2.1 螺旋天线的初始参数定义 2.2 天线结构的可视化 1.3 螺旋天线参数修改 2.螺旋天线辐射特性的仿真分析 2.1 辐射方向图 2.2 方位角与仰角模式的二维分析 2.3 天线方向性的定量计算 3.螺旋天…

作者头像 李华
网站建设 2026/7/14 15:20:39

app测试机APP6.8.7

APP6.8.7一级目录二级目录三级目录一级目录 4554的 二级目录 545454的时候 三级目录 视频

作者头像 李华
网站建设 2026/7/14 15:20:37

如何检查Java环境变量是否配置成功?

好的&#xff0c;我们来检查Java环境变量是否配置成功。以下是两种常用的方法&#xff1a;方法一&#xff1a;通过命令行验证打开命令提示符 (Windows) 或终端 (macOS/Linux)&#xff1a;Windows&#xff1a;按 Win R&#xff0c;输入 cmd&#xff0c;按回车。macOS&#xff1…

作者头像 李华
网站建设 2026/7/14 15:20:38

CSDN 实测|360CDN 缓存命中率与跨网加速表现

做网站和运维的朋友都清楚&#xff0c;CDN 直接影响访问速度、源站压力与带宽成本。最近我在个人站点与测试环境&#xff0c;对 360CDN 做了一轮为期一周的实测&#xff0c;重点看缓存命中率与跨网 / 跨地域加速表现&#xff0c;只讲实测数据与配置心得&#xff0c;不做过度宣传…

作者头像 李华
网站建设 2026/7/14 15:20:56

技术日志的收集分析与管理规范制定

技术日志的收集分析与管理规范制定 在数字化时代&#xff0c;技术日志作为系统运行、故障排查和性能优化的重要依据&#xff0c;其收集、分析与管理的规范性直接影响运维效率与业务连续性。无论是开发、测试还是生产环境&#xff0c;日志数据的价值日益凸显&#xff0c;但缺乏…

作者头像 李华