六十天前端强化训练之第九天之数组操作方法

ops/2025/3/6 11:37:22/

=====欢迎来到编程星辰海的博客讲解======

目录

一、数组操作方法知识讲解

1. 基础操作方法

2. 遍历与转换方法

3. 查找与判断方法

4. 其他实用方法

二、核心代码示例

三、实现效果说明

四、学习要点总结

五、扩展阅读推荐

六、案例:使用 map/filter 实现数据筛选转换


一、数组操作方法知识讲解

在 JavaScript 中,数组是开发中最常用的数据结构之一。数组提供了一系列内置方法,用于操作和转换数据。以下是核心方法的分类和详解:


1. 基础操作方法

a. 增删元素

  • push()
    向数组末尾添加一个或多个元素,返回新长度。

    JS

    const arr = [1, 2];
    arr.push(3); // arr变为[1,2,3]
    
  • pop()
    删除并返回数组最后一个元素。

    JS

    const last = arr.pop(); // last=3,arr变为[1,2]
    
  • unshift()
    向数组头部添加一个或多个元素,返回新长度。

    JS

    arr.unshift(0); // arr变为[0,1,2]
    
  • shift()
    删除并返回数组第一个元素。

    JS

    const first = arr.shift(); // first=0, arr变为[1,2]
    

b. 截取与拼接

  • slice(start, end)
    返回从 start 到 end(不含)的新数组,原数组不变。

    JS

    const sub = [1,2,3].slice(1,3); // sub=[2,3]
    
  • splice(start, deleteCount, ...items)
    从 start 开始删除 deleteCount 个元素,并插入新元素。

    JS

    const arr = [1,2,3];
    arr.splice(1,1,'a'); // arr变为[1,'a',3]
    

2. 遍历与转换方法

a. 遍历

  • forEach(callback)
    对每个元素执行回调函数,无返回值。

    JS

    [1,2,3].forEach((num) => console.log(num));
    
  • map(callback)
    返回新数组,由回调函数返回值组成。

    JS

    const doubled = [1,2,3].map(n => n*2); // [2,4,6]
    
  • filter(callback)
    返回满足条件(回调返回true)的元素组成的新数组。

    JS

    const evens = [1,2,3].filter(n => n%2 === 0); // [2]

b. 归并

  • reduce(callback, initialValue)
    从左到右将数组归并为单个值。

    JS

    const sum = [1,2,3].reduce((acc, n) => acc + n, 0); // 6
    
  • reduceRight()
    类似 reduce,但从右到左执行。


3. 查找与判断方法
  • find(callback)
    返回第一个满足条件的元素,否则返回 undefined

    JS

    const firstEven = [1,3,4,5].find(n => n%2===0); // 4
    
  • some(callback)
    判断至少有一个元素满足条件。

    JS

    const hasNegative = [1, -2, 3].some(n => n < 0); // true
    
  • every(callback)
    判断所有元素是否满足条件。

    JS

    const allPositive = [1,2,3].every(n => n > 0); // true
    

4. 其他实用方法
  • concat(arr2)
    合并数组,返回新数组。

    JS

    const merged = [1,2].concat([3,4]); // [1,2,3,4]
    
  • flat(depth)
    将嵌套数组“扁平化”到指定深度。

    JS

    [1, [2, [3]]].flat(2); // [1,2,3]
    
  • sort(compareFunction)
    原地排序数组(默认按字符串Unicode排序)。

    JS

    [3,1,2].sort((a,b) => a - b); // [1,2,3]
    

二、核心代码示例

JAVASCRIPT

// 示例1: map转换数据
const users = [{ id: 1, name: 'Alice', age: 25 },{ id: 2, name: 'Bob', age: 30 }
];
const names = users.map(user => user.name); // ['Alice', 'Bob']// 示例2: filter筛选数据
const adults = users.filter(user => user.age >= 18);// 示例3: map + filter链式调用
const adultNames = users.filter(user => user.age >= 18).map(user => user.name);// 示例4: reduce计算总和
const totalAge = users.reduce((sum, user) => sum + user.age, 0); // 55

三、实现效果说明

  • JSFiddle:JSFiddle - Code Playground我使用的这个
  1. map 转换:将对象数组提取为名称数组。
  2. filter 筛选:保留年龄≥18的用户。
  3. 链式调用:先筛选后转换,结果更高效。
  4. reduce 汇总:快速计算年龄总和。

四、学习要点总结

  1. 方法特性

    • 区分是否修改原数组(如 push vs concat)。
    • 回调函数参数通常为 (元素, 索引, 原数组)
  2. 链式调用优化
    优先使用 map/filter 等方法代替 forEach,以支持链式操作。

  3. 性能注意
    避免在 map/filter 中执行副作用操作,保持函数纯净。


五、扩展阅读推荐

  1. 官方文档

    • MDN Array
  2. 实战文章

    • JavaScript 数组方法全解析
    • Mastering Arrays in JavaScript

六、案例:使用 map/filter 实现数据筛选转换

目标:从用户列表中筛选出年龄≥25的用户,并将其格式化为 { name: 'Alice (25)' }

JAVASCRIPT

const users = [{ id: 1, name: 'Alice', age: 25 },{ id: 2, name: 'Bob', age: 30 },{ id: 3, name: 'Charlie', age: 20 }
];const formattedUsers = users.filter(user => user.age >= 25).map(user => ({name: `${user.name} (${user.age})`}));console.log(formattedUsers);
// 输出:
// [
//   { name: 'Alice (25)' },
//   { name: 'Bob (30)' }
// ]

代码解析

  1. 筛选阶段filter 保留年龄≥25的用户。
  2. 转换阶段map 重构对象,合并名称和年龄字段。

http://www.ppmy.cn/ops/163590.html

相关文章

Mac 基于 Ollama 安装 DeepSeek-R1(蒸馏版本)、AnythingLLM 及使用体验

文章目录 Mac 基于 Ollama 安装 DeepSeek-R1&#xff08;蒸馏版本&#xff09;、AnythingLLM 及使用体验Ollama 简介下载与安装 Ollama下载并运行 DeepSeek-R11. 在终端运行&#xff08;建议从 8B 开始&#xff09;2. 本地模型存储路径3. 终端测试4. 查询服务状态5. 退出服务 下…

华为云IAM 用户名和IAM ID

账号 当您首次使用华为云时注册的账号&#xff0c;该账号是您的华为云资源归属、资源使用计费的主体&#xff0c;对其所拥有的资源及云服务具有完全的访问权限&#xff0c;可以重置用户密码、分配用户权限等。账号统一接收所有IAM用户进行资源操作时产生的费用账单。 账号不能…

[css] line-height如何继承

line-height继承&#xff0c;一共有以下3种情况&#xff1a; <body><p>这是一行文字</p> </body>写具体数值&#xff0c;则直接继承该值。 body {font-size: 20px;line-height: 50px; /* 数值 */ } p {font-size: 10px; }<p> 元素 line-height…

Python项目-基于深度学习的校园人脸识别考勤系统

引言 随着人工智能技术的快速发展&#xff0c;深度学习在计算机视觉领域的应用日益广泛。人脸识别作为其中的一个重要分支&#xff0c;已经在安防、金融、教育等多个领域展现出巨大的应用价值。本文将详细介绍如何使用Python和深度学习技术构建一个校园人脸识别考勤系统&#…

嵌入式L6计算机网络

Telnet不加密 socket是应用层和下面的内核

城市管理综合执法系统源码,B/S模式与手机等移动终端架构,java语言开发,可扩展性强

随着中国城市化进程的加快&#xff0c;城市管理中的各种问题越来越突出&#xff0c;城市管理中信息渠道不畅&#xff0c;问题无法及时准确的反映到政府各职能部门&#xff1b;问题处理不及时&#xff0c;管理被动后置&#xff1b;条块分割&#xff0c;职责不清&#xff0c;职权…

LC串联带初始值的时域表达式

LC串联&#xff0c;在t0时刻接入直流电压 U i n U_{in} Uin​。 电感电流 i ( t ) i(t) i(t)和电容电压 u c ( t ) u_c(t) uc​(t)的时域表达式可通过二阶微分方程求解。以下是推导过程与结果&#xff1a; 1. 微分方程建立 电感 L L L与电容 C C C串联&#xff0c;接入直流…

【SegRNN 源码理解】self.revIN可逆实例标准化

if self.revin: #self.revin 1 &#xff08;休止符&#xff09;x self.revinLayer(x, norm).permute(0, 2, 1) # b,s,c -> b,c,s # goto 也是一种标准化 是什么两次标准化分布偏移实例归一化 实例归一化 分布偏移 计算方法 # 归一化步骤 x (x - mean) / std # 消…