FrankKai / FrankKai.github.io

FE blog

Home Page:https://frankkai.github.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

手写Array.prototype.*

FrankKai opened this issue · comments

主要手写一些常用的Array.prototype上的函数。

  • 手写filter
  • 手写map
  • 手写every

手写filter

  • 实现
  • 测试

实现

const filter = (arr, callback) => {
  const result = [];
  for (let i = 0; i < arr.length; i++) {
    const validate = callback(arr[i], i, arr);
    if (validate) {
      result.push(arr[i]);
    }
  }
  return result;
};

测试

const arr = [1, 2, 3, 4];

/**
 * 1.测试callback入参
 */
filter(arr, (item, index, arr) => console.log(item, index, arr));
/**
 * 2.测试callback断言
 */
let filterArr = filter(arr, (item) => item > 1);
console.log(filterArr);

手写map

  • 实现
  • 测试

实现

const map = (arr, callback) => {
  const result = [];
  for (let i = 0; i < arr.length; i++) {
    result.push(callback(arr[i], i, arr));
  }
  return result;
};

测试

const arr = [1, 2, 3, 4];

/**
 * 1.测试callback入参
 */
map(arr, (item, index, arr) => console.log(item, index, arr));
/**
 * 2.测试callback映射
 */
let mapArr = map(arr, (item, index) => ({ value: item, index }));
console.log(mapArr);

手写every

  • 实现
  • 测试

实现

const every = (arr, callback) => {
  let result = true;
  for (let i = 0; i < arr.length; i++) {
    if (!callback(arr[i], i, arr)) {
      result = false;
      break;
    }
  }
  return result;
};

测试

const arr = [1, 2, 3, 4];

/**
 * 1.测试callback入参
 */
every(arr, (item, index, arr) => console.log(item, index, arr));
/**
 * 2.测试callback断言
 */
let everyTruthy = every(arr, (item) => item > 0);
let everyFalsy = every(arr, (item) => item > 2);
console.log(everyTruthy, everyFalsy); // true, false