当前位置: 首页 > news >正文

JavaScript学习笔记(二):遍历方法汇总

JavaScript 遍历方法汇总

JavaScript 提供了多种遍历数组和对象的方法,每种方法适用于不同的场景。


数组遍历方法
  1. for 循环

    • 适用于需要精确控制遍历过程(如跳出循环、跳过某次循环)。
    • 语法:
      for (let i = 0; i < arr.length; i++) {console.log(arr[i]);
      }
      

  2. forEach

    • 适用于简单的遍历操作,无返回值。
    • 语法:
      arr.forEach((item, index) => {console.log(item, index);
      });
      

  3. map

    • 适用于需要对数组每个元素进行操作并返回新数组。
    • 语法:
      const newArr = arr.map((item) => item * 2);
      

  4. filter

    • 适用于筛选符合条件的元素并返回新数组。
    • 语法:
      const filteredArr = arr.filter((item) => item > 2);
      

  5. reduce

    • 适用于将数组元素累积为单个值。
    • 语法:
      const sum = arr.reduce((acc, item) => acc + item, 0);
      

  6. for...of

    • 适用于遍历可迭代对象(如数组、字符串)。
    • 语法:
      for (const item of arr) {console.log(item);
      }
      


对象遍历方法
  1. for...in

    • 适用于遍历对象的所有可枚举属性(包括原型链上的属性)。
    • 语法:
      for (const key in obj) {console.log(key, obj[key]);
      }
      

  2. Object.keys

    • 适用于获取对象自身的可枚举属性名数组。
    • 语法:
      Object.keys(obj).forEach((key) => {console.log(key, obj[key]);
      });
      

  3. Object.values

    • 适用于获取对象自身的可枚举属性值数组。
    • 语法:
      Object.values(obj).forEach((value) => {console.log(value);
      });
      

  4. Object.entries

    • 适用于获取对象自身的可枚举键值对数组。
    • 语法:
      Object.entries(obj).forEach(([key, value]) => {console.log(key, value);
      });
      


使用场景对比

  1. 数组遍历

    • 需要精确控制遍历过程时使用 for 循环。
    • 简单遍历且不需要返回值时使用 forEach
    • 需要返回新数组时使用 mapfilter
    • 需要累积计算时使用 reduce
    • 遍历可迭代对象时使用 for...of
  2. 对象遍历

    • 遍历对象属性(包括原型链)时使用 for...in
    • 仅需属性名时使用 Object.keys
    • 仅需属性值时使用 Object.values
    • 需要键值对时使用 Object.entries

性能对比

  • for 循环通常是最快的遍历方法,尤其是在大型数据集上。
  • forEachmapfilter 等方法虽然代码简洁,但在性能上略逊于 for 循环。
  • for...offor 循环稍慢,但语法更简洁。
  • for...in 遍历对象时性能较低,因为它会遍历原型链上的属性。

总结

  • 选择遍历方法时需根据具体场景和需求决定。
  • 性能要求高的场景优先使用 for 循环。
  • 代码简洁性要求高的场景可使用高阶函数(如 mapfilter)。
  • 遍历对象时优先使用 Object.keysObject.valuesObject.entries,避免使用 for...in 遍历原型链。
http://www.dtcms.com/a/392610.html

相关文章:

  • Ubuntu22.04显卡掉驱动,重装命令
  • 模式组合应用-享元模式
  • 租房小程序房产小程序源码方案详解
  • p-value与e-value
  • 面经分享--京东一面
  • 大数据毕业设计选题推荐-基于大数据的帕金森病数据可视化分析系统-Spark-Hadoop-Bigdata
  • stack 和 queue
  • 执行yarn init报错:error Invalid package name.(question name)包名格式不对
  • Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 | 土堆教程
  • Transformer中为什么要使用多头注意力?
  • 《嵌入式硬件(十六):基于IMX6ULL的I2C的操作》
  • AI.工作助手.工作提效率
  • 【开题答辩全过程】以 Louis宠物商城为例,包含答辩的问题和答案
  • 微服务-网络模型与服务通信方式openfein
  • 如何快速定位局域网丢包设备?
  • 算法<java>——排序(冒泡、插入、选择、归并、快速、计数、堆、桶、基数)
  • 深入浅出CMMI:从混乱到卓越的研发管理体系化之路
  • Docker一键部署prometheus并实现飞书告警详解
  • 基于“开源AI大模型AI智能名片S2B2C商城小程序”的多平台资源位传播对直播营销流量转化的影响研究
  • 【设计模式】适配器模式 在java中的应用
  • 2013/07 JLPT听力原文 问题四
  • MyBatis 缓存体系剖析
  • MySQL 主从复制 + MyCat 读写分离 — 原理详解与实战
  • Vmake AI:美图推出的AI电商商品图编辑器,快速生成AI时装模特和商品图
  • Debian13 钉钉无法打开问题解决
  • 02.容器架构
  • Diffusion Model与视频超分(1):解读淘宝开源的视频增强模型Vivid-VR
  • 通过提示词工程(Prompt Engineering)方法重新生成从Ollama下载的模型
  • 有没有可以检测反爬虫机制的工具?
  • 大模型为什么需要自注意力机制?