JavaScript入门基础篇-day03
一、为什么需要数组?
在我们正式学习数组之前,先思考一个场景:假设我们要记录一个班级50位同学的期末成绩。如果不用数组,代码会是这样的:
let score1 = 85;
let score2 = 92;
let score3 = 78;
// ... 要写50个变量!
let score50 = 88;
这显然非常低效!数组的出现完美解决了这个问题:
let scores = [85, 92, 78, ..., 88];
数组就像是一个智能收纳盒,可以帮我们:
-
统一管理相关数据
-
保持数据顺序
-
快速定位和修改元素
二、创建数组的三种姿势
1. 字面量法(最常用)
let fruits = ['苹果', '香蕉', '橙子'];
2. Array构造函数
let colors = new Array('红色', '蓝色', '绿色');
⚠️ 注意陷阱:当参数只有一个且为数字时,表示创建指定长度的空数组
let arr = new Array(5); // 创建包含5个空位的数组
console.log(arr.length); // 5
3. ES6的Array.of()
解决构造函数的歧义问题:
let arr1 = Array.of(5); // [5]
let arr2 = Array.of(1,2,3); // [1,2,3]
三、数组的基本操作手册
1. 访问元素
let animals = ['猫', '狗', '兔子'];
console.log(animals[0]); // "猫"
console.log(animals[2]); // "兔子"
2. 修改元素
animals[1] = '柯基犬';
console.log(animals); // ['猫', '柯基犬', '兔子']
3. 获取数组长度
console.log(animals.length); // 3
4. 动态长度特性
animals[5] = '熊猫';
console.log(animals);
// ['猫', '柯基犬', '兔子', 空属性 × 2, '熊猫']
console.log(animals.length); // 6
四、数组方法大全(重点掌握)
1. 增删操作
方法 | 作用 | 示例 | 返回值 |
---|---|---|---|
push() | 尾部添加元素 | arr.push('新元素') | 新数组长度 |
pop() | 删除尾部元素 | arr.pop() | 被删除的元素 |
unshift() | 头部添加元素 | arr.unshift('新元素') | 新数组长度 |
shift() | 删除头部元素 | arr.shift() | 被删除的元素 |
splice() | 指定位置增删 | arr.splice(开始索引, 删除个数, 新增元素) | 被删除元素的数组 |
splice()详解:
let nums = [1, 2, 3, 4, 5];
// 删除:从索引1开始删除2个元素
nums.splice(1, 2);
// nums变为 [1,4,5]// 新增:在索引1处新增元素
nums.splice(1, 0, 'a', 'b');
// nums变为 [1, 'a', 'b', 4, 5]// 替换:删除并新增
nums.splice(2, 1, 'c');
// nums变为 [1, 'a', 'c', 4, 5]
2. 查找与遍历
forEach():数组遍历
let prices = [15, 20, 30];
prices.forEach(function(item, index) {console.log(`第${index}个商品价格:${item}元`);
});
map():数据转换
let discounts = prices.map(price => price * 0.8);
console.log(discounts); // [12, 16, 24]
filter():数据过滤
let affordable = prices.filter(price => price < 25);
console.log(affordable); // [15, 20]
find():查找元素
let firstExpensive = prices.find(price => price > 25);
console.log(firstExpensive); // 30
reduce():累计计算
let total = prices.reduce((sum, price) => sum + price, 0);
console.log(total); // 65
3. 其他实用方法
slice():数组切片
let arr = [1, 2, 3, 4, 5];
let part = arr.slice(1, 4); // 截取索引1到3
console.log(part); // [2, 3, 4]
concat():数组合并
let newArr = arr.concat([6, 7]);
console.log(newArr); // [1,2,3,4,5,6,7]
includes():存在判断
console.log(arr.includes(3)); // true
sort():数组排序
let random = [3, 1, 4, 2];
random.sort(); // 默认按字符串排序
console.log(random); // [1, 2, 3, 4]// 数字排序需要比较函数
let nums = [10, 5, 40, 25];
nums.sort((a, b) => a - b);
console.log(nums); // [5, 10, 25, 40]
五、特别注意事项
(1)引用类型特性
let arr1 = [1, 2];
let arr2 = arr1;
arr2.push(3);
console.log(arr1); // [1, 2, 3] 原数组也被修改!
(2)稀疏数组
let sparseArr = [1,,3];
console.log(sparseArr.length); // 3
console.log(sparseArr[1]); // undefined
(3)类型自由
六、实战小技巧
(1)快速去重
let duplicates = [1,2,2,3,3,3];
let unique = [...new Set(duplicates)];
(2)数组转对象
let keyValuePairs = [['name', '张三'], ['age', 25]];
let obj = Object.fromEntries(keyValuePairs);
// {name: "张三", age: 25}
(3)清空数组
let myArr = [1,2,3];
myArr.length = 0; // 最优雅的方式
七、学习建议
-
在Chrome控制台多练习数组方法
-
尝试用数组方法重构日常代码
-
掌握数组方法链式调用:
let result = [1,2,3,4,5].filter(n => n > 2).map(n => n * 2).reduce((sum, n) => sum + n, 0);
console.log(result); // 24
掌握数组是成为JavaScript高手的必经之路。建议读者创建自己的"数组方法速查表",在实际项目中多加实践。当你能自如地组合使用各种数组方法时,处理数据将变得游刃有余!
巩固练习:
-
实现数组反转函数(不要用reverse)
-
找出数组中出现次数最多的元素
-
实现二维数组的扁平化
相关文章:
JavaScript入门基础篇-day03
一、为什么需要数组? 在我们正式学习数组之前,先思考一个场景:假设我们要记录一个班级50位同学的期末成绩。如果不用数组,代码会是这样的: let score1 85; let score2 92; let score3 78; // ... 要写50个变量&am…...
Leetcode-5 好数对的数目
Leetcode-5 好数对的数目(简单) 题目描述思路分析通过代码(python) 题目描述 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j ,就可以认为这是一组 好数对 。 返回好数对的数目。 示…...

openEuler安装MySql8(tar包模式)
操作系统版本: openEuler release 22.03 (LTS-SP4) MySql版本: 下载地址: https://dev.mysql.com/downloads/mysql/ 准备安装: 关闭防火墙: 停止防火墙 #systemctl stop firewalld.service 关闭防火墙 #systemc…...
Opencv实用操作6 开运算 闭运算 梯度运算 礼帽 黑帽
1.相关函数 开运算 img_open cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#(图片,算法,核) 闭运算 img_close cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#(图片,算法,核) 梯度…...

基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统
详细视频:【基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统-哔哩哔哩】 https://b23.tv/azUqQXe...

Git:现代软件开发的基石——原理、实践与行业智慧·优雅草卓伊凡
Git:现代软件开发的基石——原理、实践与行业智慧优雅草卓伊凡 一、Git的本质与核心原理 1. 技术定义 Git是一个分布式版本控制系统(DVCS),由Linus Torvalds在2005年为管理Linux内核开发而创建。其核心是通过快照(Sna…...

NLua性能对比:C#注册函数 vs 纯Lua实现
引言 在NLua开发中,我们常面临一个重要选择:将C#函数注册到Lua环境调用,还是直接在Lua中实现逻辑? 直觉告诉我们,C#作为编译型语言性能更高,但跨语言调用的开销是否会影响整体性能?本文通过基准…...

【计算机网络】第2章:应用层—Web and HTTP
目录 一、Web 与 HTTP 二、总结 (一)Web 的定义与功能 (二)HTTP 协议的定义与功能 (三)HTTP 协议的核心机制 1. HTTP 请求与响应流程 2. HTTP 的连接类型 3. HTTP 的状态码 (四…...
HarmonyOS 5 应用开发导读:从入门到实践
一、HarmonyOS 5 概述 HarmonyOS 5 是华为推出的新一代分布式操作系统,其核心设计理念是"一次开发,多端部署"。与传统的移动操作系统不同,HarmonyOS 5 提供了更强大的跨设备协同能力,支持手机、平板、智能穿戴、智慧屏…...
大数据治理:分析中的数据安全
引言 随着大数据技术在各行业的深度应用,海量数据蕴含的价值被不断挖掘。然而,数据规模的爆发式增长与分析场景的复杂化,使数据安全问题日益凸显。从数据泄露、隐私侵犯到非法访问,每一个安全漏洞都可能带来难以估量的损失。本文将…...

数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践
在工业4.0浪潮席卷全球制造业的当下,西门子安贝格电子制造工厂(Electronic Works Amberg, EWA)凭借数字孪生技术的深度应用,构建起全球制造业数字化转型的典范。这座位于德国巴伐利亚州的“未来工厂”,通过虚实融合的数…...
国内高频混压PCB厂家有哪些?
一、技术领先型厂商(聚焦材料与工艺突破) 猎板PCB 技术亮点:真空层压工艺实现FR-4与罗杰斯高频材料(RO4350B/RO3003)混压,阻抗公差3%,支持64单元/板的5G天线模块,插损降低15%。 应用…...

【图像处理基石】立体匹配的经典算法有哪些?
1. 立体匹配的经典算法有哪些? 立体匹配是计算机视觉中从双目图像中获取深度信息的关键技术,其经典算法按技术路线可分为以下几类,每类包含若干代表性方法: 1.1 基于区域的匹配算法(Local Methods) 通过…...

day12 leetcode-hot100-19(矩阵2)
54. 螺旋矩阵 - 力扣(LeetCode) 1.模拟路径 思路:模拟旋转的路径 (1)设计上下左右方向控制器以及边界。比如zy1向右,zy-1向左;sx1向上,sx-1向下。上边界0,下边界hang-1&a…...
将Java应用集成到CI/CD管道:从理论到生产实践
在2025年的软件开发领域,持续集成与持续部署(CI/CD)已成为敏捷开发和DevOps的核心实践。根据2024年DevOps报告,85%的企业通过CI/CD管道实现了交付周期缩短50%以上,特别是在金融、电商和SaaS行业。Java,作为…...

密钥管理系统在存储加密场景中的深度实践:以TDE透明加密守护文件服务器安全
引言:数据泄露阴影下的存储加密革命 在数字化转型的深水区,企业数据资产正面临前所未有的安全挑战。据IBM《2025年数据泄露成本报告》显示,全球单次数据泄露事件平均成本已达465万美元,其中存储介质丢失或被盗导致的损失占比高达…...

webpack打包基本配置
需要的文件 具体代码 webpack.config.js const path require(path);const HTMLWebpackPlugin require(html-webpack-plugin);const {CleanWebpackPlugin} require(clean-webpack-plugin); module.exports {mode: production,entry: "./src/index.ts",output: {…...

酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法
酷派Cool系列主打低端市场,系统无任何GMS程序,也不支持直接开启或者安装谷歌服务等功能,对于国内部分经常使用谷歌服务商店的小伙伴非常不友好。涉及机型有酷派Cool20/Cool20S /30/40/50/60等旗下多个设备。好在这些机型运行的系统都是安卓11…...

LabVIEW旋转机械智能监测诊断系统
采用 LabVIEW 开发旋转机械智能监测与故障诊断系统,通过集品牌硬件与先进信号处理技术,实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性,解决了复杂工业环境下信号干扰强、故障特征提取难等问题,为…...
数据结构 -- 判断正误
1、栈只能顺序存储。 答案: 错误 原因 栈是一种 逻辑结构,表示“后进先出”(LIFO)的操作规则。栈的实现方式不限于顺序存储,还可以使用链式存储。 顺序存储:使用数组实现栈,称为顺序栈。链式…...
vue3前端实现一键复制,wangeditor富文本复制
首先需要拿到要复制的内容,然后调用https的navigator.clipboard方法进行复制,但是这个因为浏览器策略只能在本地localhost和https环境下才能生效,http环境访问不到这个方法,在http环境在可以使用传统方式创建 textarea 进行复制 …...
小白畅通Linux之旅-----Linux进程管理
目录 一、进程查看命令 1、pstree 2、ps 3、pgrep 4、top、htop 二、进程管理命令 1、kill 2、pkill 和 killall 三、进程类型 1、前台进程 2、后台进程 一、进程查看命令 1、pstree 用于查看进程树之间的关系,谁是父进程,谁是子进程&#…...

【芯片设计中的跨时钟域信号处理:攻克亚稳态的终极指南】
在当今芯片设计中,多时钟域已成为常态。从手机SoC到航天级FPGA,不同功能模块运行在各自的时钟频率下,时钟域间的信号交互如同“语言不通”的对话,稍有不慎就会引发亚稳态、数据丢失等问题。这些隐患轻则导致功能异常,重…...

接地气的方式认识JVM(一)
最近在学jvm,浮于表面的学了之后,发现jvm并没有我想象中的那么神秘,这篇文章将会用接地气的方式来说一说这些jvm的相关概念以及名词解释。 带着下面两个问题来阅读 认识了解JVM大致有什么在代码运行时的都在背后做了什么 JVM是个啥…...
教师申报书课题——项目名称: 基于DeepSeek-R1与飞书妙记的课堂话语智能分析实践计划
明白了!针对教师个人能力范围(无需编程、无需服务器、零预算),我设计一个纯手工+免费工具组合的极简技术方案,用飞书基础功能和DeepSeek网页版就能实现核心分析。申报书重点突出 “轻量、易用、快速启动”。 项目申报书(极简个人实践版) 项目名称: 基于DeepSeek-R1与飞…...

JAVA:Kafka 消息可靠性详解与实践样例
🧱 1、简述 Apache Kafka 是高吞吐、可扩展的流处理平台,在分布式架构中广泛应用于日志采集、事件驱动和微服务解耦场景。但在使用过程中,消息是否会丢?何时丢?如何防止丢? 是很多开发者关心的问题。 Kafka 提供了一套完整的机制来保障消息从生产者 ➜ Broker ➜ 消费…...
【前端】Twemoji(Twitter Emoji)
目录 注意使用Vue / React 项目 验证 Twemoji 的作用: Twemoji 会把你网页/应用中的 Emoji 字符(如 😄)自动替换为 Twitter 风格的图片(SVG/PNG); 它不依赖系统字体,因此在 Android、…...

Electron 桌面程序读取dll动态库
序幕:被GFW狙击的第一次构建 当我在工位上输入npm install electron时,控制台跳出的红色警报如同数字柏林墙上的一道弹痕: Error: connect ETIMEDOUT 104.20.22.46:443 网络问题不用愁,请移步我的另外文章进行配置:…...
实时技术对比:SSE vs WebSocket vs Long Polling
早期网站仅展示静态内容,而如今我们更期望:实时更新、即时聊天、通知推送和动态仪表盘。 那么要如何实现实时的用户体验呢?三大经典技术各显神通: • SSE(Server-Sent Events):轻量级单向数据…...
js 手写promise
const PENDING pending; const FULFILLED fulfilled; const REJECTED rejected;class MyPromise {#status PENDING;#result undefined;#handler undefined;constructor(executor) {// 不能写在外面,因为this指向会出问题const resolve (data) > {this.#ch…...