返回

手把手教你玩转 Array.filter、some、every 和 reduce 四大函数,助你成为 JavaScript 编程高手

前端

前言

JavaScript 中的数组是一个非常强大的数据结构,它可以存储各种类型的值,并且提供了许多有用的方法来操作数组数据。其中,Array.filter、Array.some、Array.every 和 Array.reduce 这四大函数是 JavaScript 中非常重要的高阶函数,它们可以帮助你轻松地处理数组数据,让你的代码更加简洁高效。

一、Array.filter 参数说明 手写实现

1. 参数说明

参数 类型 必填 默认值
array Array - 要过滤的数组
callback Function - 过滤函数,该函数接受三个参数:当前元素、当前元素的索引和数组本身

2. 手写实现

Array.prototype.filter = function(callback) {
  const result = [];
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      result.push(this[i]);
    }
  }
  return result;
};

二、Array.some 参数说明 手写实现

1. 参数说明

参数 类型 必填 默认值
array Array - 要测试的数组
callback Function - 测试函数,该函数接受三个参数:当前元素、当前元素的索引和数组本身

2. 手写实现

Array.prototype.some = function(callback) {
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      return true;
    }
  }
  return false;
};

三、Array.every 参数说明 手写实现

1. 参数说明

参数 类型 必填 默认值 描述
array Array - 要测试的数组
callback Function - 测试函数,该函数接受三个参数:当前元素、当前元素的索引和数组本身

2. 手写实现

Array.prototype.every = function(callback) {
  for (let i = 0; i < this.length; i++) {
    if (!callback(this[i], i, this)) {
      return false;
    }
  }
  return true;
};

四、Array.reduce 参数说明 手写实现

1. 参数说明

参数 类型 必填 默认值 描述
array Array - 要累积的数组
callback Function - 累积函数,该函数接受四个参数:累积值、当前元素、当前元素的索引和数组本身
initialValue any undefined 初始值

2. 手写实现

Array.prototype.reduce = function(callback, initialValue) {
  let accumulator = initialValue === undefined ? this[0] : initialValue;
  for (let i = initialValue === undefined ? 1 : 0; i < this.length; i++) {
    accumulator = callback(accumulator, this[i], i, this);
  }
  return accumulator;
};

实例演示

下面我们通过几个实例来演示这四大函数的用法。

1. 使用 Array.filter 过滤数组

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 过滤出偶数
const evenNumbers = numbers.filter((number) => number % 2 === 0);

console.log(evenNumbers); // [2, 4, 6, 8, 10]

2. 使用 Array.some 测试数组

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 测试数组中是否包含大于 5 的数字
const hasNumberGreaterThan5 = numbers.some((number) => number > 5);

console.log(hasNumberGreaterThan5); // true

3. 使用 Array.every 测试数组

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 测试数组中的数字是否都大于 0
const allNumbersGreaterThan0 = numbers.every((number) => number > 0);

console.log(allNumbersGreaterThan0); // true

4. 使用 Array.reduce 累积数组

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 计算数组中数字的总和
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);

console.log(sum); // 55

结语

以上就是 Array.filter、Array.some、Array.every 和 Array.reduce 这四大函数的详细介绍。这些函数非常强大,可以帮助你轻松地处理数组数据,让你的代码更加简洁高效。希望本文能帮助你更好地理解和使用这些函数。