JavaScript 词条目录
前端Wiki/JavaScript/进阶/对象与数组

数组遍历

ES5/ES6 提供了一整套「高阶遍历方法」,它们都接收一个回调函数,比 for 循环更声明式。核心六个必须熟练:forEach(纯遍历)、map(加工每个元素,返回等长新数组)、filter(筛选,返回满足条件的子集)、find/findIndex(找第一个满足条件的元素/下标)、reduce(累积计算成一个值)、some/every(是否存在 / 是否全都满足)。

选方法的思路:要「每个都做一件事」用 forEach;要「变成另一组数据」用 map;要「挑出一部分」用 filter;要「汇总成一个结果」(求和、求最大、拼对象)用 reduce。

这些方法返回的都是新数组/新值,不修改原数组,因此可以链式调用:arr.filter(...).map(...) 一行搞定「先筛选再加工」,这是实际项目里最常见的组合。

本节要点map 返回等长新数组,filter 返回子集,reduce 汇总成一个值,some/every 做布尔判断;这些方法都不改原数组,可以链式组合。
JavaScript
const scores = [85, 42, 90, 66];

// forEach:纯遍历,无返回值
scores.forEach((s, i) => console.log('第' + i + '个:' + s));

// map:加工每个元素 → 等长新数组
console.log(scores.map(s => s * 2));

// filter:筛选满足条件的 → 新数组
console.log(scores.filter(s => s >= 60));   // [85, 90, 66]

// find / findIndex:找第一个满足的
console.log(scores.find(s => s < 60));      // 42
console.log(scores.findIndex(s => s < 60)); // 1

// reduce:累积成一个值(0 是初始值)
const total = scores.reduce((acc, s) => acc + s, 0);
console.log('总分:' + total);

// some / every:有一个满足 / 全都满足
console.log(scores.some(s => s > 89));      // true
console.log(scores.every(s => s > 60));     // false

// 链式调用:先筛选再加工
console.log(
  scores.filter(s => s >= 60).map(s => '分数' + s)
);