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)

  • 作用 :先 mapflat(默认深度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. forEachmap 的区别?

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

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

    • 求和、扁平数组、统计频率、链式调用等复杂操作。
相关推荐
kyriewen12 分钟前
豆包和千问同时关了智能体,我用它们搭的 3 个自动化全废了——迁移方案整理
前端·javascript·ai编程
前端一小卒25 分钟前
我用 TypeScript 从零手写了一个 Claude Code,然后发现它的核心只有 30 行
前端·agent
Waay25 分钟前
面试口述版:个人对 Prometheus 完整理解
运维·学习·云原生·面试·职场和发展·kubernetes·prometheus
铁皮饭盒44 分钟前
用 Bun.cron 定时 7 月 7 日,为啥? 看图1
javascript
大圣编程2 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang2 小时前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
之歆3 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
再吃一根胡萝卜3 小时前
如何把小米 MiMo 接入 CodeBuddy,打造私有 Agent
前端
负责的蛋挞4 小时前
异步HttpModule的实现方式
java·服务器·前端
黄敬峰5 小时前
🚀 从 Prompt 到 Harness:AI 编程的下半场,我们如何给大模型套上“挽具”?
面试