首页 > 编程知识 正文

JS数组的遍历上 (含forEach等方法源码)

时间:2023-05-04 07:59:05 阅读:83946 作者:4966

forEach()

方法调用数组中的每个元素,循环遍历数组中的每个元素,并将元素传递给回调函数。

内部回调函数可以传递三个参数:函数(item、索引和arr )

item是必需参数,表示当前元素

索引是表示当前元素索引的可选参数

arr也是可选参数,表示当前元素所属的数组对象(导线测量中的数组)。

实现forEach源代码:

阵列. prototype.my foreach=函数{

for(letI=0; I this .长度; I ) {2}

Callback(this[I],I,this ) ) ) ) ) ) )。

}

}

与本机比较:

嗯。 我明白。 应该没错。

filter()

创建新数组。 通过检查指定数组中满足条件的所有元素,可以创建新数组中的元素。 正式解释坑意味着,首先创建一个空数组,然后过滤回调的返回值,如果返回值可以隐式转换为true,则将对应的元素推送到该空数组

的回调函数可以传递三个与forEach完全相同的参数

item是必需参数,表示当前元素

索引是表示当前元素索引的可选参数

arr也是可选参数,表示当前元素所属的数组对象(导线测量中的数组)。

与forEach不同,它有返回值。 只需要寻找和接收变量。

实现过滤器源代码:

阵列. prototype.myfilter=函数{

let新arr=[ ]

for(letI=0; I this .长度; I ) {2}

if (呼叫后退(this [ I ],I,this ) ) )

推力(这是) ) ) ) ) ) ) )。

}

}

返回新地球

}

效果测试:

map()

方法返回新数组。 数组中的元素是原始数组元素调用函数处理的值。

这个很容易理解。 也就是说,也有返回值。 其返回值是将您扫描的数组中的回调函数中的返回值推送到预先创建的空数组中

的回调函数可以传递三个与forEach完全相同的参数

item是必需参数,表示当前元素

索引是表示当前元素索引的可选参数

arr也是可选参数,表示当前元素所属的数组对象(导线测量中的数组)。

eg:

实现map源代码:

阵列. prototype.mymap=函数{

let新arr=[ ]

for(letI=0; I this .长度; I ) {2}

推(卡尔巴克(this,I,this ) )

} return newArr }

效果展示:

reduce()

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

和之前的数组方法一样,它也需要传入一个回调函数作为参数。出了回调函数之外,它还可以穿入一个形参(initialValue)作为初始值。

不同于之前,它的第一个参数发生变化:

array.reduce(function(pre, item, index, arr) {},initialValue)中

pre为必填参数,上一次调用回调返回的值,或者是提供的初始值 initialValue

item为必填参数,表示当前元素

index为可选参数,表示当前元素的索引

arr同样为可选参数,表示当前元素所属的数组对象(正在遍历的这个数组)。

刚刚的有一点没有说明,就是当 initialValue 传参的时候,pre的初始值为initialValue ,如果 initialValue 没有传出,则 pre 为数组中的第一个元素。

其次,如果initialValue 没有传参,pre 为数组中的第一个元素。那么item将从数组中第二个开始。

反之正常顺序:

en,这东西其实用的地方不多,不过它效率要比forEach快几十倍,,反正我没用过~~~~

reduce源码实现:

Array.prototype.myReduce = function(callback, init) { let previous = init || this[0] let i = 0 if (init === undefined) i = 1 for (i; i < this.length; i++) { previous = callback(previous, this[i], i, this) } return previous }

效果展示:

reduceRight()

同reduce()类似,不过不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加(reduce自左往右累加,reduceRight自右往左累加)。

参数也都是一样的!

array.reduceRight(function(pre, item, index, arr) {},initialValue)中

pre为必填参数,上一次调用回调返回的值,或者是提供的初始值 initialValue

item为必填参数,表示当前元素

index为可选参数,表示当前元素的索引

arr同样为可选参数,表示当前元素所属的数组对象(正在遍历的这个数组)。

使用细节参照reduce即可,我就不水了~

对啦,如果没有传初始值,pre默认是最后一个元素: this[this.length -1]

eg:

reduceRight源码实现:

Array.prototype.myReduceRight = function(callback, init) { let previous = init || this[this.length - 1] let i = this.length if (init === undefined) i = this.length - 1 for (i; i > 0; i--) { previous = callback(previous, this[i-1], i, this) } return previous }

效果展示:

传入初始值时:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。