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

js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some

遍历方法返回值使用场景备注副作用
for 循环——遍历数组通用可以改变原数组
forEach 循环——遍历数组ES5 新增,不支持中断和异步可以改变原数组
for of 循环——遍历数组ES6 新增可以改变原数组
map格式化后的数组格式化数组的API不会改变原数组
filter过滤后的数组过滤数组的API不会改变原数组
reduce最终计算结果累计数组的API不会改变原数组
every匹配结果全部匹配数组的API不会改变原数组
some匹配结果部分匹配数组的API不会改变原数组

for 循环

缺点:编码不太便捷

for (let i = 0; i < arr.length; i++) {console.log(arr[i]);
}

forEach 循环

缺点:不支持中断和异步

let arr = [1, 2, 3]arr.forEach((item, index) => {console.log(item, index)
})

不支持中断

使用 return 提前结束当次循环,但还会继续遍历!

let arr = [1, 2, 3]arr.forEach((item) => {console.log(item)if (item === 2) {return}console.log('执行完本次循环')
})

打印结果

1
执行完本次循环
2
3
执行完本次循环

不支持异步

import axios from 'axios'let infoList = []let id_list = ['1', '2', '3']id_list.forEach(async (id) => {let res = await axios.get(`http://jsonplaceholder.typicode.com/users/${id}`)console.log(res)infoList.push(res.data)
})console.log(infoList) // []

for of 循环【推荐】

默认只能遍历数组中的元素

let arr = [1, 2, 3]for (let item of arr) {console.log(item)
}

要获取到数组的下标,需使用 entries

let arr = [1, 2, 3]for (let [index, item] of arr.entries()) {console.log(index, item)
}

支持中断

使用 break 提前跳出循环(常用于遍历数组,查找目标元素)

let arr = [1, 2, 3]for (let item of arr) {console.log(item)if (item === 2) {break}
}
// 1 2

支持异步

import axios from 'axios'let infoList = []let id_list = ['1', '2', '3']async function getInfo(id_list, infoList) {for (let id of id_list) {let res = await axios.get(`http://jsonplaceholder.typicode.com/users/${id}`)infoList.push(res.data)}console.log(infoList) // 可得到预期结果
}getInfo(id_list, infoList)

但更推荐使用 Promise.all 实现

import axios from 'axios'let infoList = []let id_list = ['1', '2', '3']let promise_list = []for (let id of id_list) {promise_list.push(axios.get(`http://jsonplaceholder.typicode.com/users/${id}`))
}Promise.all(promise_list).then((res) => {infoList = res.map((item) => item.data)console.log(infoList) // 可得到预期结果
})

map 格式化

let arr = [{age: 20},{age: 30},{age: 40}
]const result = arr.map((item) => {return {age: `${item.age}`}
})console.log(result)
// [ { age: '20岁' }, { age: '30岁' }, { age: '40岁' } ]

filter 过滤

let arr = [{name: '朝阳',age: 20},{name: '张三',age: 30},{name: '李四',age: 40}
]const result = arr.filter(({ age }) => age < 30)console.log(result)
//[ { name: '朝阳', age: 20 } ]

reduce 累计

如求和

let arr = [1, 2, 3]
let sum = arr.reduce((lastResult, nextItem) => lastResult + nextItem)
console.log(sum) // 6

更多 reduce 高级用法见
https://blog.csdn.net/weixin_41192489/article/details/116661854

every 全部匹配

let arr = [1, 2, 3]// 是否每一个元素都小于 3
const result = arr.every((item) => item < 3)console.log(result)
// false

some 部分匹配

let arr = [1, 2, 3]// 是否存在元素小于 3
const result = arr.some((item) => item < 3)console.log(result)
// true
http://www.lryc.cn/news/391125.html

相关文章:

  • Node.js开发实战 视频教程 下载
  • VS2022(Visual Studio 2022)最新安装教程
  • 从华为和特斯拉之争,看智能驾驶的未来
  • 20240705 每日AI必读资讯
  • C++ 设计模式之访问者模式
  • linux——IPC 进程间通信
  • JAVA数字化产科管理平台源码:涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理
  • http数据传输确保完整性和保密性整流程方案(含源码)
  • UE插件与云渲染:10个提升效率的选择
  • [Shell编程学习路线]——shell脚本中case语句多分支选择详解
  • Django REST Framework(四)DRF Serializer
  • 【C语言】bool 关键字
  • 开发电商ERP系统需要接入哪些平台API?
  • Meet AI4S 直播预告丨房价分析新思路:神经网络直击复杂地理环境中的空间异质性
  • 支持向量机(SVM)在机器学习中的简单示例
  • 使用Anaconda虚拟环境安装Opencv、pytorch、torchvision踩坑记录
  • 【人工智能】CPU、GPU与TPU:人工智能领域的核心处理器概述
  • 【康复学习--LeetCode每日一题】3099. 哈沙德数
  • docker使用jdk21启动jar包报错
  • Object 类中的公共方法详解
  • python 字典 一个key 多 value 遍历
  • vue---基本原理(二)
  • 桂花网蓝牙网关X1000:引领物联网新时代的智能连接
  • JAVA案例模拟电影信息系统
  • 基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务10:Hive安装部署
  • 第一百四十二节 Java数据类型教程 - Java字符数据类型
  • AI 绘画的常用技巧和操作方法
  • Kafka入门到精通(四)-SpringBoot+Kafka
  • 起飞,纯本地实时语音转文字!
  • SQL面试题练习 —— 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期