# forEach
# Description
调用 iteratee 遍历 collection(集合) 中的每个元素, iteratee 调用 3 个参数: (value, index|key, collection)。 如果迭代函数(iteratee)显式的返回 false ,迭代会提前退出。
注意: 与其他 "集合" 方法一样,类似于数组,对象的 "length" 属性也会被遍历。想避免这种情况,可以用 forIn 或者 forOwn 代替。
# Params
(collection, iteratee)
# Return
{Array|Object}
# Depend
import arrayEach from './.internal/arrayEach.js'
import baseEach from './.internal/baseEach.js'
# Code
function forEach(collection, iteratee) {
const func = Array.isArray(collection) ? arrayEach : baseEach
return func(collection, iteratee)
}
# Analyze
会判断传入的 collection
是不是 array
,如果是 array
,则使用 arrayEach
,否则使用 baseEach
# Remark
- Array.prototype.forEach() MDN (opens new window) 方法对数组的每个元素执行一次给定的函数。
- NodeList.prototype.forEach() MDN (opens new window) 接口的 forEach() 方法按插入顺序为列表中的每个值对调用一次参数中给定的回调。
- TypedArray.prototype.forEach() MDN (opens new window) 方法对类型化数组的每个元素调用提供的函数。 这个方法的算法和 Array.prototype.forEach()相同。 TypedArray 是这里的 类型化数组类型 之一。
- Set.prototype.forEach() MDN (opens new window) 方法会根据集合中元素的插入顺序,依次执行提供的回调函数。
- Map.prototype.forEach() MDN (opens new window) 方法按照插入顺序依次对 Map 中每个键 / 值对执行一次给定的函数
# Example
console.log(forEach([1,2,3,4,5], (v, i, arr) => arr[i] = ++v)) // [ 2, 3, 4, 5, 6 ]