当前位置:首页 > JavaScript

js实现reduce

2026-01-31 15:46:00JavaScript

实现 reduce 方法

在 JavaScript 中,reduce 是一个高阶函数,用于将数组中的元素通过指定的函数累积为单个值。以下是一个自定义实现的 reduce 方法:

js实现reduce

Array.prototype.myReduce = function(callback, initialValue) {
  let accumulator = initialValue !== undefined ? initialValue : this[0];
  let startIndex = initialValue !== undefined ? 0 : 1;

  for (let i = startIndex; i < this.length; i++) {
    accumulator = callback(accumulator, this[i], i, this);
  }

  return accumulator;
};

使用示例

假设需要对数组 [1, 2, 3, 4] 求和:

js实现reduce

const arr = [1, 2, 3, 4];
const sum = arr.myReduce((acc, curr) => acc + curr, 0);
console.log(sum); // 输出 10

参数说明

  • callback:接收四个参数的函数:

    • accumulator:累积值,初始值为 initialValue 或数组的第一个元素。
    • currentValue:当前处理的数组元素。
    • currentIndex:当前元素的索引(可选)。
    • array:调用 reduce 的数组本身(可选)。
  • initialValue(可选):作为第一次调用 callback 时的第一个参数。如果未提供,则使用数组的第一个元素作为初始值。

注意事项

  • 如果没有提供 initialValue,空数组调用 reduce 会抛出错误。
  • 回调函数应确保返回累积值,否则后续迭代可能出错。

测试用例

// 求和
const sum = [1, 2, 3].myReduce((acc, val) => acc + val, 0);
console.log(sum); // 6

// 拼接字符串
const concat = ['a', 'b', 'c'].myReduce((acc, val) => acc + val, '');
console.log(concat); // 'abc'

// 扁平化数组
const flattened = [[0, 1], [2, 3], [4, 5]].myReduce(
  (acc, val) => acc.concat(val),
  []
);
console.log(flattened); // [0, 1, 2, 3, 4, 5]

通过自定义实现 reduce,可以更好地理解其内部机制,并根据需求扩展功能。

标签: jsreduce
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…