js数组遍历有哪些方法以及简单的代码实现

一、单纯遍历(无返回值)

1. forEach

  • 作用:遍历数组,执行副作用(如修改外部变量)。
  • 不改变原数组,无返回值。
javascript 复制代码
const arr = [1, 2, 3];
arr.forEach(item => {
  console.log(item * 2); // 输出:2, 4, 6
});

二、返回新数组

2. map

  • 作用:遍历数组,返回处理后的新数组。
  • 不改变原数组。
javascript 复制代码
const arr = [1, 2, 3];
const newArr = arr.map(item => item * 2);
console.log(newArr); // [2, 4, 6]

3. flatMap(ES2019)

  • 作用 :先 map 再 flat(默认深度1)。
javascript 复制代码
const arr = [1, [2], 3];
const result = arr.flatMap(item => item);
console.log(result); // [1, 2, 3]

三、返回布尔值

4. every

  • 作用:检查是否所有元素都满足条件。
javascript 复制代码
const arr = [2, 4, 6];
const isAllEven = arr.every(item => item % 2 === 0);
console.log(isAllEven); // true

5. some

  • 作用:检查是否有至少一个元素满足条件。
javascript 复制代码
const arr = [1, 3, 4];
const hasEven = arr.some(item => item % 2 === 0);
console.log(hasEven); // true

四、查找元素

6. find(ES6)

  • 作用:返回第一个满足条件的元素。
javascript 复制代码
const arr = [1, 2, 3];
const found = arr.find(item => item > 1);
console.log(found); // 2

7. findIndex(ES6)

  • 作用:返回第一个满足条件的元素的索引。
javascript 复制代码
const arr = [1, 2, 3];
const index = arr.findIndex(item => item > 1);
console.log(index); // 1

五、过滤数组

8. filter

  • 作用:返回满足条件的新数组。
javascript 复制代码
const arr = [1, 2, 3];
const filtered = arr.filter(item => item > 1);
console.log(filtered); // [2, 3]

六、聚合计算

9. reduce

  • 作用:从左到右累积计算结果。
javascript 复制代码
const arr = [1, 2, 3];
const sum = arr.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 6

10. reduceRight

  • 作用:从右到左累积计算结果。
javascript 复制代码
const arr = [1, 2, 3];
const str = arr.reduceRight((acc, cur) => acc + cur.toString(), '');
console.log(str); // '321'

七、迭代器方法

11. keys / values / entries(ES6)

  • 作用:返回数组的键、值或键值对的迭代器。
javascript 复制代码
//迭代器方法 for of 返回数组的值
for(const value of arr){
    console.log(value);
  }

const arr = ['a', 'b'];
// 获取索引(keys)
for (const key of arr.keys()) {
  console.log(key); // 0, 1
}
// 获取值(values)
for (const value of arr.values()) {
  console.log(value); // 'a', 'b'
}
// 获取键值对(entries)
for (const [index, value] of arr.entries()) {
  console.log(index, value); // 0 'a', 1 'b'
}

总结表

方法 作用 返回值 是否修改原数组
forEach 遍历执行副作用 undefined 否
map 返回处理后的新数组 新数组 否
filter 返回过滤后的新数组 新数组 否
every 检查是否所有元素满足条件 布尔值 否
some 检查是否有元素满足条件 布尔值 否
find 返回第一个匹配的元素 元素或undefined 否
findIndex 返回第一个匹配的索引 索引或-1 否
reduce 从左到右累积计算 任意类型 否
reduceRight 从右到左累积计算 任意类型 否
keys/values/entries 返回迭代器 迭代器对象 否

面试常见问题

  1. forEach 和 map 的区别?

    • forEach 无返回值,用于执行副作用;map 返回新数组,用于数据转换。
  2. 如何提前终止遍历?

    • for 循环可用 break,但 forEach/map 等无法终止,需改用 some/every 通过返回 true 终止。
  3. reduce 能做什么?

    • 求和、扁平数组、统计频率、链式调用等复杂操作。
相关推荐
默_笙28 分钟前
🚥 给 RAG 装一台心电监护仪:LangSmith 全链路观测(上)
前端·javascript
前端snow1 小时前
ai agent --- mem0 外挂记忆系统
前端
沙漠之主2 小时前
计算机二级考试备考全攻略:从报名到通关
计算机网络·面试
燐妤2 小时前
LangGraph-复习总览
python·ai·面试·agent·学习方法·langgraph
变与不变8062 小时前
js同步和异步难点重点详解
开发语言·javascript·ecmascript
特立独行的猫a2 小时前
用仓颉写一个 Tauri:IPC 的每次往返实现原理(web层到仓颉层的触发过程)
前端·ui·harmonyos·tauri·鸿蒙·仓颉
Dovis(誓平步青云)2 小时前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑
骑着蜗牛撵大象3273 小时前
Qt 事件机制详解:从 QEvent 派生类到事件过滤器的全景指南
前端·python
qq_2518364573 小时前
理发管理系统 —— 会员模块
开发语言·前端·python·flask
Dovis(誓平步青云)3 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化