@[toc]

关于 自定义JS工具类 相关类似的源码请看 https://gitee.com/ykang2020/my_utils (opens new window)

# 0. 目标

自定义以下数组原型上的方法

map(): 返回一个由回调函数的返回值组成的新数组 reduce(): 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值 filter(): 将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回 find(): 找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 undefined findIndex(): 找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 -1 every(): 如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false some(): 如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false

相关的原生js可以查看 【JS】JavaScript数组-归并方法-reduce-reduceRight (opens new window) 【ES6】JavaScript数组-迭代器方法-keys()-values()-entries()-迭代方法-every()-some()-filter()-map()-forEach() (opens new window) 【JS】JavaScript数组-操作方法-concat-数组强制打平-slice-splice方法使用 (opens new window)

# 1. 封装 map 函数

# 定义

/**
 * 封装map函数
 * @param {Array} arr 
 * @param {Function} callback 
 * @returns 
 */
export function map(arr, callback) {
  // 声明一个空的结果数组
  let result = [];
  // 遍历数组
  for (let i = 0; i < arr.length; i++) {
    // 执行回调,将回调函数执行结果添加到结果数组中
    result.push(callback(arr[i], i));
  }
  return result;
}

# 使用

import { map } from './array/declares'
// 声明一个数组
const arr = [2, 4, 6, 8]
const result = map(arr, (item) => {
  return item * 10
})
console.log(result)

# 结果

在这里插入图片描述

# 2. 封装 reduce 函数

# 定义

/**
 * 封装reduce函数
 * @param {Array} arr 
 * @param {Function} callback 
 * @param {number} initValue 
 * @returns 
 */
export function reduce(arr, callback, initValue) {
  // 声明变量
  let result = initValue;
  for (let i = 0; i < arr.length; i++) {
    // 执行回调
    result = callback(result, arr[i]);
  }
  return result;
}

# 使用

const arr = [2, 4, 6, 8]
const result = reduce(arr, (res, value) => {
  return res + value;
}, 1)

console.log(result)

# 结果

在这里插入图片描述

# 3. 封装 filter 函数

# 定义

/**
 * 封装filter函数
 * @param {Array} arr 
 * @param {Function} callback 
 * @returns 
 */
export function filter(arr, callback) {
  // 定义空数组接收 回调返回为true的 元素
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    let res = callback(arr[i], i);
    // 如果回调结果为真 就压入结果数组中
    if (res) {
      result.push(arr[i]);
    }
  }
  return result;
}

# 使用

const arr = [2, 3, 4, 5, 6, 8];
const result = filter(arr, (item) => item % 2 === 0);
console.log(result);

# 结果

在这里插入图片描述

# 4. 封装find函数

# 定义

/**
 * 封装find函数
 * @param {Array} arr 
 * @param {Function} callback 
 * @returns 
 */
export function find(arr, callback) {
  for (let i = 0; i < arr.length; i++){
    let res = callback(arr[i], i)
    if (res) {
      // 返回 满足条件的第一个元素
      return arr[i]
    }
  }
  // 如果没有遇到满足条件的就返回undefined
  return undefined
}

# 使用

const arr = [2, 3, 4, 5, 6, 8];
const result = find(arr, item => item > 5)
const result2 = find(arr, item => item > 10)
console.log(result);
console.log(result2);

# 结果

在这里插入图片描述

# 5. 封装findIndex函数

# 定义

/**
 * 封装findIndex函数
 * @param {Array} arr 
 * @param {Function} callback 
 * @returns 
 */
 export function findIndex(arr, callback) {
  for (let i = 0; i < arr.length; i++){
    let res = callback(arr[i], i)
    if (res) {
      // 返回 满足条件的第一个元素的小标
      return i
    }
  }
  // 如果没有遇到满足条件的就返回 -1
  return -1
}

# 使用

const arr = [2, 3, 4, 5, 6, 8];
const result = findIndex(arr, item => item > 5)

const result2 = findIndex(arr, item => item > 10)

console.log(result);
console.log(result2);

# 结果

在这里插入图片描述

# 6. 封装every函数

# 定义

/**
 * 封装every函数
 * @param {Array} arr 
 * @param {Function} callback 
 * @returns 
 */
export function every(arr, callback) {
  for (let i = 0; i < arr.length; i++){
    let res = callback(arr[i])
    // 只要有一个不满足就返回false
    if (!res) {
      return false
    }
  }
  return true
}

# 使用


const arr = [2, 3, 4, 5, 6, 8];
const result = every(arr, item => item > 0)

const result2 = every(arr, item => item > 5)


console.log(result);
console.log(result2);

# 结果

在这里插入图片描述

# 7. 封装some函数

# 定义

/**
 * 封装some函数
 * @param {Array} arr 
 * @param {Function} callback 
 * @returns 
 */
export function some(arr, callback) {
  for (let i = 0; i < arr.length; i++){
    let res = callback(arr[i])
    if (res) {
      // 只要有一个满足就返回 true
      return true
    }
  }
  return false
}

# 使用

const arr = [2, 3, 4, 5, 6, 8];
const result = some(arr, (item) => item > 10);

const result2 = some(arr, (item) => item > 5);
console.log(result);
console.log(result2);

# 结果

在这里插入图片描述

上次更新: 2022/4/22 15:59:56