当前位置:首页 > JavaScript

js foreach 实现

2026-03-14 19:23:22JavaScript

forEach 的基本用法

Array.prototype.forEach 是 JavaScript 中用于遍历数组的方法,接受一个回调函数作为参数,对数组的每个元素执行该函数。

const array = [1, 2, 3];
array.forEach((element, index, array) => {
  console.log(element, index, array);
});

实现自定义 forEach

可以通过扩展 Array.prototype 或独立函数实现类似 forEach 的功能。

js foreach 实现

function customForEach(array, callback) {
  for (let i = 0; i < array.length; i++) {
    callback(array[i], i, array);
  }
}

const numbers = [10, 20, 30];
customForEach(numbers, (num, index) => {
  console.log(`Element at ${index} is ${num}`);
});

原型链扩展实现

Array.prototype 上添加方法,模拟原生 forEach 的行为。

Array.prototype.myForEach = function(callback) {
  for (let i = 0; i < this.length; i++) {
    callback(this[i], i, this);
  }
};

const fruits = ['apple', 'banana', 'cherry'];
fruits.myForEach((fruit, idx) => {
  console.log(`${idx + 1}: ${fruit}`);
});

处理稀疏数组

原生 forEach 会跳过空元素,自定义实现时可通过 hasOwnProperty 检查。

js foreach 实现

Array.prototype.sparseForEach = function(callback) {
  for (let i = 0; i < this.length; i++) {
    if (this.hasOwnProperty(i)) {
      callback(this[i], i, this);
    }
  }
};

const sparseArray = [1, , 3];
sparseArray.sparseForEach(item => console.log(item)); // 只输出 1 和 3

终止遍历的变通方案

原生 forEach 不能通过 break 终止,但可以通过抛出异常或使用 some/every 替代。

const data = [1, 2, 3, 4, 5];
try {
  data.forEach(item => {
    if (item > 3) throw new Error('BreakLoop');
    console.log(item);
  });
} catch (e) {
  if (e.message !== 'BreakLoop') throw e;
}

性能注意事项

在大型数组或性能敏感场景中,传统 for 循环通常比 forEach 更快,但可读性较差。

const bigArray = new Array(1000000).fill(0);
console.time('forEach');
bigArray.forEach(x => x * 2);
console.timeEnd('forEach');

console.time('for loop');
for (let i = 0; i < bigArray.length; i++) {
  bigArray[i] * 2;
}
console.timeEnd('for loop');

标签: jsforeach
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…