资源:https://www.jianshu.com/p/79831d81f6b3
数组的一些的高阶函数:map()是es6的方法,forEach遍历整个数组,filter过滤数组,还有一个find数组,也是过滤的,但是它只要找到一个真值,就return了。
1:map()又称为数组的映射,我的理解就是,以一条数组为模板,刻画出不同的数组。一般高阶函数有三个参数,第一个参数代表的数组的项也就是值,第二个参数指的是数组的下标,第三个值指的数组本身,具体情况看下图:
这上面我们是在控制台中显示,第一个参数a代表的是什么,下面是控制台的显示:
从控制台的显示我们可以看出,我们第一个参数,代表的数组的没项的值。
第二个参数代表的值:
我们可以在控制台中显示我们第二个参数是什么:
从控制台中我们可以看出第二个值代表的是我们数组的下标。
第三个参数代表的是什么:
接下来在控制台中显示:
在控制台中我们看出第三个参数c代表的是我们数组本身。
接下来是我们高阶函数map的意义:
我们从上面知道了a这个参数代表的是数组每个项的值,所以我们只需要就a进行运算,就可以得到不同的数组
下面是控制台中的显示:
从控制台中看到我们得到新的数组,且每一项是模板数组的6倍。
2:forEach的高阶函数,它的作用是遍历整个数组,跟for循环差不多,它也有三个参数,跟上面map的参数的意义是一样的
下面是具体用法:
我们在html中写出4个按钮,然后在js中用document.getElementsClassName("box)采用类名的获取的方法获取改数组对象,然后赋值给数组box1,在用boxs1本身的forEach方法,给他每项添加一个点击事件,当按钮点击的时候返回数组的下标。因为不好录像用一个图表示,还请谅解,如果有更好的方法,希望跟我分享一下,谢谢。
3:filter数组的过滤高阶函数方法,过滤数组里面不相同的类型或者其他。他也有三个参数参数的意义一般都一样的。下面小列子:
我们刚刚已经介绍完了数组的参数,这几行代码写的是过滤数组arr,如果不是Boolean类型的数组就去掉。
下面是控制台的显示:
在控制台,我们看到,不是Boolean类型的值,已经被过滤了。
4:find的高阶函数,它也过滤,但是它只要遇到一个真值就退出了函数,下面的列子会具体说明:
上面的代码说的是:过滤掉arr数组里面小于2的数,下面是控制台的显示:
可以看到arr数组里面比2大于的还有4,但是数组并没有显示出来,这就是find过滤方法的本质,它只要遇到一个真值就会退出,在4前面还有一个3,3比2打,所以3是真值,所以他把3拿出来了就退出了函数,并没有管4;
5:数组去重 splice
(1)正序去重:从前面往后面去重。有弊端。下面的列子说明:
上面的代码的意思是:设立一个数组,里面有很多数是重复的,我们如何去掉这些重复的数,用splice函数,我们假比要删除数组里面2的重复数,如果我们采用正序去重的方法会有弊端,那就是图中所说的会把所有的相同的数都删除。下面是控制台中的显示:
从控制台中看出我们的数组确实把2相同的都删掉了,数组里面没有2了,但这不是我们想要的结果,因为数组里面没有2了。
还有一种情况,我们看下图
我们可以在上面的图中看到有两个2连在一起的,我们在去去掉重复的数,看看2会不会保存。
控制台的显示:
我们可以看到2保存下来了,但是万一是4个那哪有会是神马情况:
上面的代码有4个2相邻,那我们在去重会有什么情况,请看下面的控制台显示:
保留两个2了,这是为什么,这是因为正序去重的弊端,当我们正序去重的时候,当我们去掉一个相同的数组项的时候,下一项会自动的顶上前面的哪一项,所以我们就漏了一个,所以会出现这种情况,所以最好的去重的方法是反序去重
反序去重:从最后面依次往前面比。具体情况看下图:
控制台的显示:
详细情况可以看到去掉重复的数了,在上面中下面的两行代码的意思,如果我们去掉i的话,数组不但去重,还会按照升序排列,但是去掉j的话就是还是去掉重复的位置。