FrankKai / FrankKai.github.io

FE blog
https://frankkai.github.io/
362 stars 39 forks source link

手写Array.prototype.* #225

Open FrankKai opened 4 years ago

FrankKai commented 4 years ago

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

FrankKai commented 4 years ago

手写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);
FrankKai commented 4 years ago

手写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);
FrankKai commented 4 years ago

手写every

/**