前端循环:for、forEach、map 指南

一、基础语法与使用场景

1. for 循环

语法结构:

for (初始化; 条件; 迭代) {
  // 循环体
}

经典用例:

const arr = [1, 2, 3];
for (let i=0; i<arr.length; i++) {
  console.log(`索引 ${i}: 值 ${arr[i]}`);
}
// 输出:
// 索引 0: 值 1
// 索引 1: 值 2
// 索引 2: 值 3
 

核心特点:

  • 灵活控制:可通过 break 中断循环,continue 跳过迭代

  • 性能优先:处理超大数据时效率最高(如 10万+ 元素)


2. forEach 方法

语法结构:

arr.forEach((当前值, 索引, 原数组) => {
  // 回调函数
});

典型场景:

const users = ['Alice', 'Bob', 'Charlie'];
users.forEach((user, index) => {
  console.log(`${index+1}. ${user}`);
});
// 输出:
// 1. Alice
// 2. Bob
// 3. Charlie
 

关键特性:

  • 简洁直观:无需手动管理索引

  • 不可中断:无法通过 return 或 break 提前终止循环


3. map 方法

语法形式:

const newArr = arr.map((当前值, 索引, 原数组) => {
  return 新值;
});
 

数据转换示例:

const prices = [100, 200, 300];
const discounted = prices.map(price => price * 0.8);
console.log(discounted); // [80, 160, 240]
 

核心价值:

  • 无副作用:返回新数组,不修改原数据

  • 链式调用:适合函数式编程组合

  • const result = data
      .filter(item => item.active)
      .map(item => ({ ...item, score: item.value * 10 }));
 

二、深度使用注意事项

1. for 循环的陷阱

  • 索引越界:错误边界导致死循环

  • // 危险示例(i <= arr.length)
    for (let i=0; i<=arr.length; i++) {
      // 最后一次循环访问 arr[3](undefined)
    }
 
  • 性能优化:缓存数组长度

  • // 优化前:每次循环计算 length
    for (let i=0; i<arr.length; i++) {}
    
    // 优化后:缓存 length
    for (let i=0, len=arr.length; i<len; i++) {}
 

2. forEach 的隐藏问题

  • 无效的 return:试图用 return 中断循环

  • arr.forEach(item => {
      if (item === 'stop') return; // 无效!继续执行
    });
 
  • 异步陷阱:无法等待异步操作完成

  • // 错误示例:并行执行所有异步操作
    async function process() {
      arr.forEach(async item => {
        await fetch(item); // 不会按顺序执行
      });
    }
 

3. map 的常见误区

  • 滥用副作用:错误地修改原数组

  • // 反模式:通过 map 修改原数组
    arr.map(item => {
      item.value += 10; // 原数组元素被修改(若元素是对象)
      return item;
    });
 
  • 不必要的映射:忽略返回值导致资源浪费

  • // 错误:用 map 替代 forEach
    arr.map(item => {
      console.log(item); // 返回 undefined 数组
    });
 

三、最佳实践指南

1. 选择循环方式的决策树


    A[需要返回值吗?] -->|是| B[使用 map]
    A -->|否| C{需要中断循环?}
    C -->|是| D[使用 for]
    C -->|否| E{处理大数据?}
    E -->|是| F[优先 for]
    E -->|否| G[使用 forEach]
 

2. 性能敏感场景优化

// 超大数据处理技巧
const bigData = new Array(1000000).fill(0);

// 最佳方案:for 循环 + 缓存长度
for (let i=0, len=bigData.length; i<len; i++) {
  // 高性能操作
}

// 次优方案:倒序循环
for (let i=bigData.length; i--; ) {
  // 利用 i-- 的布尔判断
}
 

3. 现代 JavaScript 的替代方案

for...of:更简洁的迭代语法

for (const item of arr) {
  if (item === 'break') break; // 支持中断
}
reduce:复杂聚合操作

const total = arr.reduce((sum, item) => sum + item, 0);

    四、总结

    • for:灵活控制与性能优化的首选

    • forEach:简单遍历与副作用操作

    • map:纯净的数据转换工具

    • 仅供参考。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984358.html

    如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

    相关文章

    ESP8266UDP透传

    1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 响应 : OK 2. PC 连⼊入 ESP8266 softAP 就是连接wifi 3.查询ESP8266设备的IP地址 ATCIFSR 响应: CIFSR: APIP, "192.168.4.1" CIFSR: APMAC, "1a: fe: 34: a5:8d: c6" CIFSR: STAIP, "192.…

    【仿muduo库one thread one loop式并发服务器实现】

    文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…

    私有云基础架构与运维(二)

    二.私有云基础架构 【项目概述】 经过云计算基础知识及核心技术的学习后&#xff0c;希望进一步了解 IT 基础架构的演变过 程&#xff0c;通过学习传统架构、集群架构以及私有云基础架构的相关知识&#xff0c;认识企业从传统 IT 基 础架构到私有云基础架构转型的必要性。…

    DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

    DeepSeek R1-32B微调实战指南 ├── 1. 环境准备 │ ├── 1.1 硬件配置 │ │ ├─ 全参数微调:4*A100 80GB │ │ └─ LoRA微调:单卡24GB │ ├── 1.2 软件依赖 │ │ ├─ PyTorch 2.1.2+CUDA │ │ └─ Unsloth/ColossalAI │ └── 1.3 模…

    vue3 vite项目安装eslint

    npm install eslint -D 安装eslint库 npx eslint --init 初始化配置&#xff0c;按项目实际情况选 自动生成eslint.config.js&#xff0c;可以添加自定义rules 安装ESLint插件 此时打开vue文件就会标红有问题的位置 安装prettier npm install prettier eslint-config-pr…

    【五.LangChain技术与应用】【10.LangChain ChatPromptTemplate(下):复杂场景下的应用】

    凌晨两点的西二旗,你盯着监控大屏上跳动的错误日志,智能客服系统在流量洪峰中像纸船一样摇晃。用户骂声塞满弹窗:“等了十分钟就这?”“刚才说的怎么不认了?”“我要人工!!”——这时候你需要的不只是ChatPromptTemplate,而是给对话系统装上航天级操控台。 一、模板组…

    javascrip网页设计案例,SuperSlide+bootstrap+html经典组合

    概述 JavaScript作为一种强大的脚本语言&#xff0c;在网页设计领域发挥着举足轻重的作用&#xff0c;能够为网页赋予丰富的交互性与动态功能。以下通过具体案例来深入理解其应用。​ 假设要打造一个旅游网站&#xff0c;该网站具备诸多实用功能。在响应式设计方面&#xff0…

    python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据

    文章目录 使用数据获取渠道自动填充数据QTEASY数据拉取功能数据拉取接口refill_data_source()数据拉取API的功能特性多渠道拉取数据实现下载流量控制实现错误重试日志记录其他功能 qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#x…

    Vite 6 升级指南:CJS 和 ESM 的爱恨情仇

    Vite 6 升级指南&#xff1a;CJS 和 ESM 的爱恨情仇 前言&#xff1a;老朋友 CJS&#xff0c;新欢 ESM 说到 JavaScript 模块化&#xff0c;CJS 和 ESM 这俩货简直像是两代人的思维碰撞。前者是 Node.js 的老朋友&#xff0c;后者是前端新时代的宠儿。Vite 6 直接把 CJS 踢出…

    FreeRTOS任务状态查询

    一.任务相关API vTaskList&#xff08;&#xff09;&#xff0c;创建一个表格描述每个任务的详细信息 char biaoge[1000]; //定义一个缓存 vTaskList(biaoge); //将表格存到这缓存中 printf("%s /r/n",biaoge); 1.uxTaskPriorityGet&#xff08;&#xf…

    【3】VS Code 新建上位机项目---C#窗体与控件开发

    【3】VS Code 新建上位机项目---C#窗体与控件开发 1 窗体1.1 新建窗体1.2 windows程序与窗口的关系1.3 windows程序的事件1.3.1 定义事件与处理事件1.3.2 关联事件1.3.3 Windows窗体对象创建与显示(show与ShowDialog())2 控件与容器2.1 常用容器2.1.1 Groupbox2.1.2 Pannel2.1.…

    AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异

    背景 字节跳动正式发布中国首个AI原生集成开发环境工具&#xff08;AI IDE&#xff09;——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro&#xff0c;支持切换满血版DeepSeek R1&V3&#xff0c; 可以帮助各阶段开发者与AI流畅协作&#xff0c;更快、更高质量地完…

    ubuntu 20.04下ZEDmini安装使用

    提前安装好显卡驱动和cuda&#xff0c;如果没有安装可以参考我的这两篇文章进行安装&#xff1a; ubuntu20.04配置YOLOV5&#xff08;非虚拟机&#xff09;_ubuntu20.04安装yolov5-CSDN博客 ubuntu20.04安装显卡驱动及问题总结_乌班图里怎么备份显卡驱动-CSDN博客 还需要提前…

    2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距

    一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增&#xff0c;IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下&#xff0c;传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示&#xff0c;采用混合架构的企业数据运营效…

    Spring(1)——mvc概念,部分常用注解

    1、什么是Spring Web MVC&#xff1f; Spring MVC 是一种基于 Java 的实现了 MVC&#xff08;Model-View-Controller&#xff0c;模型 - 视图 - 控制器&#xff09;设计模式的 Web 应用框架&#xff0c;它是 Spring 框架的一个重要组成部分&#xff0c;用于构建 Web 应用程序。…

    PY32MD320单片机 QFN32封装,内置多功能三相 NN 型预驱。

    PY32MD320单片机是普冉半导体的一款电机专用MCU&#xff0c;芯片采用了高性能的 32 位 ARM Cortex-M0 内核&#xff0c;主要用于电机控制。PY32MD320嵌入高达 64 KB Flash 和 8 KB SRAM 存储器&#xff0c;最高工作频率 48 MHz。PY32MD320单片机的工作温度范围为 -40 ~ 105 ℃&…

    《OkHttp:工作原理 拦截器链深度解析》

    目录 一、OKHttp 的基本使用 1. 添加依赖 2. 发起 HTTP 请求 3. 拦截器&#xff08;Interceptor&#xff09; 4. 高级配置 二、OKHttp 核心原理 1. 责任链模式&#xff08;Interceptor Chain&#xff09; 2. 连接池&#xff08;ConnectionPool&#xff09; 3. 请求调度…

    HeidiSQL:一款免费的数据库管理工具

    HeidiSQL 是一款免费的图形化数据库管理工具&#xff0c;支持 MySQL、MariaDB、Microsoft SQL、PostgreSQL、SQLite、Interbase 以及 Firebird&#xff0c;目前只能在 Windows 平台使用。 HeidiSQL 的核心功能包括&#xff1a; 免费且开源&#xff0c;所有功能都可以直接使用。…

    C/C++蓝桥杯算法真题打卡(Day3)

    一、P8598 [蓝桥杯 2013 省 AB] 错误票据 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 读取数据行数unordered_map<int, int> idCount; // 用于统计每个ID出现的次数vector<int> ids; …

    【2025软考高级架构师】——软件工程(2)

    摘要 本文主要介绍了软件工程中常见的多种软件过程模型&#xff0c;包括瀑布模型、原型模型、V模型、W模型、迭代与增量模型、螺旋模型、构件组装模型、基于构件的软件工程&#xff08;CBSE&#xff09;、快速应用开发&#xff08;RAD&#xff09;、统一过程/统一开发方法和敏…