js手写数组方法之map(),reduce(),filter(),foreach()




// map() 方法通过指定函数处理数组的每个元素,并返回处理后的新数组。
Array.prototype.myMap = function(callback, thisArg) {
  let result = [];
  for (let i = 0; i < this.length; i++) {
    if (this.hasOwnProperty(i)) {
      result.push(callback.call(thisArg, this[i], i, this));
    }
  }
  return result;
};
 
// reduce() 方法对数组中的所有元素调用指定的reducer函数,将其结果汇总为单个返回值。
Array.prototype.myReduce = function(callback, initialValue) {
  let accumulator = initialValue !== undefined ? initialValue : this[0];
  let k = initialValue !== undefined ? 0 : 1;
  for (; k < this.length; k++) {
    accumulator = callback(accumulator, this[k], k, this);
  }
  return accumulator;
};
 
// filter() 方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。
Array.prototype.myFilter = function(callback, thisArg) {
  let result = [];
  for (let i = 0; i < this.length; i++) {
    if (this.hasOwnProperty(i) && callback.call(thisArg, this[i], i, this)) {
      result.push(this[i]);
    }
  }
  return result;
};
 
// forEach() 方法对数组的每个元素执行一次提供的函数。
Array.prototype.myForEach = function(callback, thisArg) {
  for (let i = 0; i < this.length; i++) {
    if (this.hasOwnProperty(i)) {
      callback.call(thisArg, this[i], i, this);
    }
  }
};
 
// 示例使用
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.myMap(function(num) {
  return num * 2;
});
console.log(doubled); // 输出: [2, 4, 6, 8, 10]
 
const sum = numbers.myReduce(function(acc, num) {
  return acc + num;
}, 0);
console.log(sum); // 输出: 15
 
const evenNumbers = numbers.myFilter(function(num) {
  return num % 2 === 0;
});
console.log(evenNumbers); // 输出: [2, 4]
 
numbers.myForEach(function(num, index) {
  console.log(`Index ${index}: ${num}`);
});

这段代码展示了如何手动实现JavaScript中的map(), reduce(), filter(), 和 forEach() 数组方法。这有助于理解这些函数的工作原理,并且可以在不依赖原生方法的环境中使用。

最后修改于:2024年08月08日 17:45

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日