JavaScript 数组方法的系统方法: 分类理解 + 形象化记忆的方法

文章目录

  • [1. 按用途分类记忆(四大类别)](#1. 按用途分类记忆(四大类别))
    • [📊 第一类:查询类(问问题 - 返回布尔值/元素)](#📊 第一类:查询类(问问题 - 返回布尔值/元素))
    • [🔄 第二类:转换类(加工厂 - 返回新数组)](#🔄 第二类:转换类(加工厂 - 返回新数组))
    • [📥 第三类:累积类(收纳箱 - 返回单个值)](#📥 第三类:累积类(收纳箱 - 返回单个值))
    • [🎯 第四类:操作类(动手做 - 可能修改原数组)](#🎯 第四类:操作类(动手做 - 可能修改原数组))
  • [2. 参数顺序的规律记忆](#2. 参数顺序的规律记忆)
  • [3. 对比记忆法(相似方法对比)](#3. 对比记忆法(相似方法对比))
    • [find vs filter:](#find vs filter:)
    • [map vs forEach:](#map vs forEach:)
  • [4. 实际场景联想记忆](#4. 实际场景联想记忆)
  • [5. 制作自己的速查表](#5. 制作自己的速查表)
  • [6. 刻意练习方法](#6. 刻意练习方法)

1. 按用途分类记忆(四大类别)

📊 第一类:查询类(问问题 - 返回布尔值/元素)

js 复制代码
// 特征:都是"问问题",返回 true/false 或具体元素
const arr = [1, 2, 3, 4, 5];

// ❓ 包含吗? -> includes(值)
arr.includes(3) // true

// ❓ 有满足条件的吗? -> some(条件)
arr.some(x => x > 3) // true

// ❓ 都满足条件吗? -> every(条件) 
arr.every(x => x > 0) // true

// ❓ 找第一个满足的 -> find(条件)
arr.find(x => x > 2) // 3

// ❓ 找第一个满足的索引 -> findIndex(条件)
arr.findIndex(x => x > 2) // 2

🔄 第二类:转换类(加工厂 - 返回新数组)

js 复制代码
// 特征:都是"加工数据",返回新数组
const arr = [1, 2, 3];

// 🏭 映射加工 -> map(加工函数)
arr.map(x => x * 2) // [2, 4, 6]

// 🏭 过滤筛选 -> filter(条件)
arr.filter(x => x > 1) // [2, 3]

// 🏭 展开一层 -> flat(深度)
[1, [2, 3]].flat() // [1, 2, 3]

// 🏭 映射后展开 -> flatMap(加工函数)
arr.flatMap(x => [x, x*2]) // [1, 2, 2, 4, 3, 6]

📥 第三类:累积类(收纳箱 - 返回单个值)

js 复制代码
// 特征:把数组"收敛"成一个值
const arr = [1, 2, 3, 4];

// 📦 从左到右累积 -> reduce(累积函数, 初始值)
arr.reduce((sum, x) => sum + x, 0) // 10

// 📦 从右到左累积 -> reduceRight(累积函数, 初始值)
arr.reduceRight((sum, x) => sum + x, 0) // 10

🎯 第四类:操作类(动手做 - 可能修改原数组)

js 复制代码
// 特征:直接操作原数组
let arr = [1, 2, 3, 4];

// ✂️ 添加/删除 -> splice(开始位置, 删除数量, 添加元素)
arr.splice(1, 2, 99) // 返回删除的元素 [2, 3]

// 📌 结尾添加 -> push(元素)
arr.push(5) // 返回新长度

// 📌 开头添加 -> unshift(元素)  
arr.unshift(0) // 返回新长度

// 🗑️ 结尾删除 -> pop()
arr.pop() // 返回删除的元素

// 🗑️ 开头删除 -> shift()
arr.shift() // 返回删除的元素

2. 参数顺序的规律记忆

🔢 统一参数模式:

方法名(回调函数(当前元素, 索引, 原数组), thisArg)

形象记忆:就像问一个人问题:

  • 当前元素:你现在在做什么?(最重要的)
  • 索引:你是第几个做的?(位置信息)
  • 原数组:你们团队都在做什么?(上下文)

参数位置口诀:

复制代码
"先值后索引,最后整个数组"

3. 对比记忆法(相似方法对比)

find vs filter:

js 复制代码
// 🔍 find - 找第一个(返回单个元素)
[1, 2, 3, 4].find(x => x > 2) // 3

// 🎯 filter - 找所有(返回数组)
[1, 2, 3, 4].filter(x => x > 2) // [3, 4]

// 记忆:find像侦探找一个人,filter像渔网捞一堆鱼

map vs forEach:

js 复制代码
// 🏭 map - 加工返回新数组(有返回值)
[1, 2, 3].map(x => x * 2) // [2, 4, 6]

// 🔄 forEach - 只是遍历(无返回值)
[1, 2, 3].forEach(x => console.log(x)) // undefined

// 记忆:map像工厂生产新产品,forEach像质检员只是检查

4. 实际场景联想记忆

购物车场景:

js 复制代码
const cart = [
    {name: '苹果', price: 5, quantity: 2},
    {name: '香蕉', price: 3, quantity: 3}
];

// 🧮 总金额:reduce(累积计算)
const total = cart.reduce((sum, item) => 
    sum + item.price * item.quantity, 0);

// 🏷️ 商品名称:map(提取属性)
const names = cart.map(item => item.name);

// 📦 贵商品:filter(筛选)
const expensive = cart.filter(item => item.price > 4);

// ✅ 有库存吗:some(是否存在)
const hasStock = cart.some(item => item.quantity > 0);

用户管理场景:

js 复制代码
const users = [
    {id: 1, name: '张三', active: true},
    {id: 2, name: '李四', active: false}
];

// 👥 活跃用户:filter
const activeUsers = users.filter(user => user.active);

// 🔢 用户ID:map  
const userIds = users.map(user => user.id);

// 🔍 找用户:find
const user = users.find(u => u.id === 1);

// ✅ 都活跃吗:every
const allActive = users.every(user => user.active);

5. 制作自己的速查表

用途 方法 返回值 修改原数组 记忆口诀
查询存在 includes() 布尔值 "包含吗?"
查询满足 some() 布尔值 "有满足的吗?"
查询全部 every() 布尔值 "都满足吗?"
查找元素 find() 元素 "找第一个"
转换所有 map() 新数组 "加工每个"
筛选元素 filter() 新数组 "过滤留下"
累积计算 reduce() 单个值 "收敛成值"

6. 刻意练习方法

每日一练:

js 复制代码
// 周一:map/filter 练习
const numbers = [1, 2, 3, 4, 5];
// 1. 所有数字平方
// 2. 只保留偶数
// 3. 数字转字符串

// 周二:find/some/every 练习  
const users = [{age: 25}, {age: 30}, {age: 17}];
// 1. 找第一个成年人
// 2. 有未成年人吗?
// 3. 都成年了吗?

项目实战:

在实际项目中有意识地在每个数组操作时思考:

  1. 我要做什么?(查询、转换、筛选、累积)
  2. 选择对应类别的方法
  3. 回忆参数顺序

这样坚持2-3周,就能形成肌肉记忆,不再需要临时查文档了!

相关推荐
会跑的葫芦怪1 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
xiaoqi9222 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233222 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头88214 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1364 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
2601_949833394 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
军军君015 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
xiaoqi9226 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos
qq_177767377 小时前
React Native鸿蒙跨平台实现应用介绍页,实现了应用信息卡片展示、特色功能网格布局、权限/联系信息陈列、评分展示、模态框详情交互等通用场景
javascript·react native·react.js·ecmascript·交互·harmonyos
2603_949462107 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter