Array.prototype.myEach = function (fn) { var arr = this; var obj = arguments[1] || window; for (let i = 0; i < arr.length; i++) { const item = arr[i]; fn.apply(obj, [item, i, arr]) } }
map
1 2 3 4 5 6 7 8 9 10 11 12
Array.prototype.myMap = function (fn) { var arr = this; var obj = arguments[1] || window; var newArr = []; for (let i = 0; i < arr.length; i++) { const item = deepClone(arr[i]); newArr.push( fn.apply(obj, [item, i, arr]) ) } return newArr; }
reduce
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Array.prototype.myReduce = function (fn, initialValue) { let arr = this; let prev; if (initialValue) { prev = initialValue; for (let i = 0; i < arr.length; i++) { const item = arr[i]; prev = fn(prev, item, i, arr); } } else { prev = arr[0]; for (let i = 1; i < arr.length; i++) { const item = arr[i]; prev = fn(prev, item, i - 1, arr); } } return prev; }
数组扁平化:
1 2 3 4 5 6 7 8 9 10 11 12 13
const arr = [1, [2, [3, 4]]];
functionflatten (arr) { let res = []; for (const v of arr) { if(Array.isArray(v)) { res.push(...flatten(v)); } else { res.push(v); } } return res; }
Post title: 数组方法重写
Post author: Chao
Create time: 2021-09-21 13:15:00
Post link: 2021/09/21/数组方法重写/
Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.