JS Array Method Scratch

forEach

Standard Definition: arr.forEach(callback(element, index, array), thisArg)

const myForEach = (arr, callback) => {
  for (let i = 0; i <= arr.length - 1; i++) {
    callback(arr[i], i, arr);
  }
};

map

Standard Definition: arr.map(callback(element, index, array), thisArg)

const myMap = (arr, callback) => {
  let res = new Array(arr.length);
  for (let i = 0; i <= arr.length - 1; i++) {
    res[i] = callback(arr[i], i, arr);
  }
  return res;
};

filter

Standard Definition: arr.filter(callback(element, index, array), thisArg)

const myFilter = (arr, callback) => {
  let res = [];
  for (let i = 0; i <= arr.length - 1; i++) {
    let flag = callback(arr[i], i, arr);
    if (flag) res.push(arr[i]);
  }
  return res;
};

reduce

Standard Definition: arr.reduce(callback(accumulator, currentValue, index, array), initialValue)

const myReduce = (arr, callback, default_value) => {
  let acc, startIndex;
  if (default_value != undefined) {
    acc = default_value;
    startIndex = 0;
  } else {
    acc = arr[0];
    startIndex = 1;
  }

  for (let i = startIndex; i <= arr.length - 1; i++) {
    acc = callback(acc, arr[i], i, arr);
  }
  return acc;
};