1. 程式人生 > 其它 >手寫陣列方法 reduce 和 map

手寫陣列方法 reduce 和 map

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