js数组基础与方法原理

                                                                           js数组基础与方法原理数组

在学习js的过程中,不可避免的就是对于数组的应用,以前我也写过关于数组的一些简单基础,在这里主要是对于数组基础的一个升华,对于一些数组中经常使用的方法进行说明与使用。首先咱们先写一个数组,里面的内容本身随便定义,我定义的数组以下:函数

1.forEach方法实现,在forEach方法中能够传入三个参数,第一个参数表示的是每一项数组中的内容,第二个参数表示index,第三个参数表示的就是数组自己。那么如今先用系统封装好的forEach方法来遍历数组中的元素。须要注意的是在使用forEach时其是不支持break,要想跳出循环,最好的方式就是使用for循环。学习

那么接下来咱们直接在数组的原型上封装一个forEach方法,在本身封装好的方法上咱们只须要输出每一项的内容,以及当前的index便可。下面也有封装好的方法的调用过程。3d

2.filter方法,其做用的返回一个新的数组,其根据是数组返回的true与false来肯定新的数组,若是返回的结果是true则将原数组中的这一项放在新的数组之中,最后直到原数组遍历完造成一个新的数组。在这个方法当中的方法参数第一个当前数组中的每一项,第二个参数为当前数组的index。首先咱们使用原生的filte方法来进行使用。,代码以下:对象

那么接下来就是原理的实现过程,代码以下:blog

其原理也是相对的比较简单,使用for循环进行遍历而后再使用一个新的数组去接收这个结果,最后返回新的数组。其应用以下:文档

3.map方法其做用是调用数组中的每个元素去进行某个函数的操做,最后返回一个新的结果。其参数也与上面的参数同样,首先对系统封装好的函数进行调用。在对这个函数的原理进行封装以前咱们还须要了解的就是深度克隆。下面是使用深度克隆以后obj1彻底的复制obj2中的内容。代码以下:原型

为何叫深度克隆呢,是由于在克隆对象的过程当中若是内部有对象,若是是简单的赋值就不能将对象中的内容赋值过去。所以在这里就须要深度克隆。其代码以下:博客

在深度克隆的方法当中,须要设置两个参数,第一个参数用于接收第二个参数中的内容。在这里将第二个元素咱们称之为目标元素。首先执行一个目标元素是否为空,若是不为空就执行下面的逻辑。在循环遍历的过程当中使用for  in语句对这个对象进行遍历,若是当前复制的内容是数组就直接进行赋值,若是是对象则再进行以后的逻辑。这样一直循环遍历,最后返回目标元素便可实现深度克隆。那么接下来咱们就继续实现以前的map方法,其原理代码以下:for循环

在这部分的代码当中与以前实现filter相似,可是不一样点在于若是数组内部是一个对象,就得对器进行判读,而后使用克隆。接下来就是本身封装的方法进行使用:

4.reduce()和reduceRight()使用指定的函数将元素进行求和,所以reduce经常使用于累加求和,reduceRight经常使用于从左往右进行累加求和。在本身封装的方法中咱们实现的是前三个参数的调用第一个参数表示数组当中第一项,第二个参数表示数组中的第二项,第三个参数表示最后返回的结果。下面就是对于这个方法的封装:

在这个封装的方法中,若是没有传入参数则第一个参数的值就为数组中的第一项,若是有则进行后一步的操做。最后使用for循环进行遍历。那么接下来就是这个本身封装好的方法的调用:

在本篇博客中所说得是经常使用数组的方法,数组中还有不少的方法须要咱们去了解。不过其原理大多如上面所说同样,在使用数组方法的过程当中,咱们只须要到官方的文档中查询便可使用。