手寫陣列方法 reduce 和 map
阿新 • • 發佈:2021-09-27
1. 手寫陣列的 reduce
方法
Array.prototype.myReduce = function (fn, init) { if (typeof fn !== 'function') { throw new Error(`${fn} is not a function`) } // 當前 this 即為呼叫 myReduce 方法的陣列 let arr = this; let res, i; // res 記錄返回的值,i 為 當前陣列下標 if (init !== undefined) { // 當傳遞了第二個引數,myReduce回撥函式的第一個引數即為 init,第二個引數為陣列的第一個元素 res = init; i = 0; } else { // 沒有傳遞引數,預設第一個引數為陣列的第一項,第二個引數為陣列的第二個元素 res = arr[0]; i = 1; } for (; i < arr.length; i++) { res = fn(res, arr[i], i, arr); // res 接收每一次迴圈 return 回來的值,作為下一次迴圈回撥函式的第一個引數 } return res; }
2. 手寫陣列的 map
方法
// 手寫 map方法 Array.prototype.myMap = function (fn, context) { if (typeof fn !== "function") { throw new Error(`${fn} is not a function`); } let arr = this; let res = []; context = context || window; //短路表示式,context有值則用,無值則為window for (let i = 0; i < arr.length; i++) { res.push(fn.call(context, arr[i], i, arr)); } return res; }
人生人山人海人來人往,自己自尊自愛自由自在。
本文來自部落格園,作者:青檸i,轉載請註明原文連結:https://www.cnblogs.com/fuct/p/15336212.html