js一些数组对象方法原理实现(手撕map,filter,every,flat等)

Array

map

在这里插入图片描述

在这里插入图片描述
map支持两个参数,一个回调函数,一个this,回调函数接受三个参数,值,索引,数组本身。
思路即是利用this拿到数组本身,然后遍历反复调用传入的回调函数fn,将值,索引,数组本身传进去调用,一般返回一个值,直接push进一个空数组,最后返回即可。

例子在这里插入图片描述

在这里插入图片描述

filter

在这里插入图片描述

在这里插入图片描述
实现思路同map类似,只不过fn从返回一个值变成了返回一个布尔值,通过这个布尔值判断要不要将当前的值加入到数组,最后返回。

例子

在这里插入图片描述
在这里插入图片描述

some

在这里插入图片描述
在这里插入图片描述

some我们知道是如果找到就返回true,没有返回false,那么在filter上再改造一下,定义一个遍历为false,当有一次会回调函数执行的时候返回true,那么就跳出循环,直接返回。

例子

在这里插入图片描述
在这里插入图片描述

find

在这里插入图片描述
在这里插入图片描述
当回调函数有一个返回ture,则赋值并且返回,否则会返回一个未定义的值,undefined。

例子

在这里插入图片描述
在这里插入图片描述

every

在这里插入图片描述

在这里插入图片描述

这个跟some其实只是反着来,初始化一个值为true,只要回调函数有一个值返回false,那么就会成立从而推出循环并且返回。

例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

forEach

在这里插入图片描述
在这里插入图片描述
也是利用for循环直接遍历循环执行回调函数即可。

例子

在这里插入图片描述
在这里插入图片描述

concat

在这里插入图片描述

实现

在这里插入图片描述

先判断是不是数组,是的话遍历push,不是的话直接push,最后返回复制的数组即可。

例子

在这里插入图片描述
在这里插入图片描述

copyWithin

在这里插入图片描述
在这里插入图片描述

实现

在这里插入图片描述
这里只是简单实现,没有考虑负数等情况,直接复制一个数组,然后通过第二个与第三个值之间进行遍历,一一代替从target索引开始的值,然后有可能target到头了,但是end的值比较大,就需要判断是不是到头了,到头了就直接Break退出即可。

例子

在这里插入图片描述
在这里插入图片描述

reduce

在这里插入图片描述
在这里插入图片描述

实现

在这里插入图片描述
先判断value是不是没传,然后直接遍历调用回调函数,定义一个变量存储每次返回的值,在作为第一个参数传入,最后返回改变量即可。

例子

在这里插入图片描述
在这里插入图片描述

splice

在这里插入图片描述

在这里插入图片描述
这里实现一个简单版的,不会影响原来数组,将原数组从target开始分为两半,第一半后面插入要插入的值,第二半前面删去deleteNum个值。

例子

在这里插入图片描述
在这里插入图片描述

includes在这里插入图片描述

注意,includes立面采用的时全等运算符
在这里插入图片描述
在这里插入图片描述

flat

flat好像是es10出的特性,用于拉平数组,接受一个参数,不传默认1,表示拉平的层数

实现

在这里插入图片描述
原理就是利用递归,判断层数,一层一层进去,层数i依次减去1,当层次为0,则不再递归,直接push进数组,若层次不为0,表示还要继续拉平,则继续递归。后面返回数组即可。

效果

在这里插入图片描述
在这里插入图片描述
第四层[1,2,[4]]开始没有拉平,因为参数是3,在这里插入图片描述
当传的值足够大,直接拉平
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderlin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值