JS 第7周笔记-数组方法(map&filter&reduce& find&some&every&includes)

本篇文章重点知识写下了 本篇文章重点知识写下了 本篇文章重点知识写下了

路线图阶段:第二阶段(现代 JavaScript 补全)第7周 性质:不是从零学,而是把第一阶段”用过但没吃透”的数组方法夯实,并补上没用过的 reduce 及其他高频方法 核心:这一族方法是同一个骨架 —— 遍历数组 + 回调函数,区别只在”怎么处理回调的返回值”


0. 统一心智模型

数组.方法((item) => ...)
//        └────┬────┘
//        回调函数,几乎都不能少(includes 例外)

1. map:加工每一项

[1, 2, 3].map((n) => n * 2)   // → [2, 4, 6]

2. filter:留下符合条件的

cart.filter((item) => item.price > 200)

3. reduce:把数组”滚雪球”成一个值(本周重点)

map/filter 输出还是数组;reduce 把整个数组收拢成一个单一的值(数字、字符串、对象……)。

const sum = numbers.reduce((acc, current) => {
  return acc + current;
}, 0);
//   ↑ 回调            ↑ 初始值

两个关键概念

雪球过程(求和 [1,2,3,4] 初始值 0)

起点 acc=0 → +1=1 → +2=3 → +3=6 → +4=10 → 返回 10

初始值类型 = 最终结果类型(通用判断法)

求和   → 结果是数字   → 初始值 0
拼字符 → 结果是字符串 → 初始值 ""
分组统计 → 结果是对象 → 初始值 {}

进阶:汇总成对象(分组计数)

const photos = [{author:"Kevin"},{author:"Aki"},{author:"Kevin"}];

const counts = photos.reduce((acc, item) => {
  acc[item.author] = (acc[item.author] || 0) + 1;
  return acc;
}, {});
// → { Kevin: 2, Aki: 1 }

要点:

⚠️ 反复栽的同一个坑:item.xxx vs acc[…]

item.author     → 当前项的原始数据(作者是谁,如 "Kevin")
acc[item.author] → 累积到现在的结果(这个作者数到几了)

4. 方括号取值(bracket notation)

reduce 计数题用到,单独记一下。

const obj = { Kevin: 3 };
obj.Kevin      // 点号:key 写死
obj["Kevin"]   // 方括号:等价

const author = "Kevin";
obj.author     // ❌ 字面找名叫 "author" 的键 → undefined
obj[author]    // ✅ author 是变量,先求值成 "Kevin",再取 → 3

5. find:找出第一个符合的项

const user = users.find((item) => item.age > 30);
filter → 返回数组 [所有符合的]
find   → 返回单个 {第一个符合的} / undefined

6. some / every:返回 true/false 的判断题

cart.some((item) => item.price > 200)    // 有没有"任意一个"符合? 一个符合就 true
cart.every((item) => item.price > 200)   // 是不是"每一个"都符合? 一个不符合就 false

7. includes:数组含不含某个值

["react", "css"].includes("react")   // → true

速查表:想要什么 → 用哪个

你想要…返回要回调?
加工每一项map等长新数组
留下符合的(多个)filter新数组(可能短)
找第一个符合的find单个项 / undefined
汇总成一个值reduce任意(数字/对象…)
有没有任意一个符合sometrue / false
是不是全部符合everytrue / false
数组含不含某个值includestrue / false

第7周验收


下一步(第8周预告)