JavaScript入门基础篇-day03

news2025/6/1 6:59:36

一、为什么需要数组?

在我们正式学习数组之前,先思考一个场景:假设我们要记录一个班级50位同学的期末成绩。如果不用数组,代码会是这样的:

let score1 = 85;
let score2 = 92;
let score3 = 78;
// ... 要写50个变量!
let score50 = 88;

 这显然非常低效!数组的出现完美解决了这个问题:

let scores = [85, 92, 78, ..., 88];

数组就像是一个智能收纳盒,可以帮我们:

  1. 统一管理相关数据

  2. 保持数据顺序

  3. 快速定位和修改元素

二、创建数组的三种姿势

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; // 最优雅的方式

    七、学习建议

    1. 在Chrome控制台多练习数组方法

    2. 尝试用数组方法重构日常代码

    3. 掌握数组方法链式调用:

    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高手的必经之路。建议读者创建自己的"数组方法速查表",在实际项目中多加实践。当你能自如地组合使用各种数组方法时,处理数据将变得游刃有余!

    巩固练习:

    1. 实现数组反转函数(不要用reverse)

    2. 找出数组中出现次数最多的元素

    3. 实现二维数组的扁平化

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2392248.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    openEuler安装MySql8(tar包模式)

    操作系统版本&#xff1a; openEuler release 22.03 (LTS-SP4) MySql版本&#xff1a; 下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/ 准备安装&#xff1a; 关闭防火墙&#xff1a; 停止防火墙 #systemctl stop firewalld.service 关闭防火墙 #systemc…

    基于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&#xff1a;现代软件开发的基石——原理、实践与行业智慧优雅草卓伊凡 一、Git的本质与核心原理 1. 技术定义 Git是一个分布式版本控制系统&#xff08;DVCS&#xff09;&#xff0c;由Linus Torvalds在2005年为管理Linux内核开发而创建。其核心是通过快照&#xff08;Sna…

    NLua性能对比:C#注册函数 vs 纯Lua实现

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

    【计算机网络】第2章:应用层—Web and HTTP

    目录 一、Web 与 HTTP 二、总结 &#xff08;一&#xff09;Web 的定义与功能 &#xff08;二&#xff09;HTTP 协议的定义与功能 &#xff08;三&#xff09;HTTP 协议的核心机制 1. HTTP 请求与响应流程 2. HTTP 的连接类型 3. HTTP 的状态码 &#xff08;四&#xf…

    数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践

    在工业4.0浪潮席卷全球制造业的当下&#xff0c;西门子安贝格电子制造工厂&#xff08;Electronic Works Amberg, EWA&#xff09;凭借数字孪生技术的深度应用&#xff0c;构建起全球制造业数字化转型的典范。这座位于德国巴伐利亚州的“未来工厂”&#xff0c;通过虚实融合的数…

    【图像处理基石】立体匹配的经典算法有哪些?

    1. 立体匹配的经典算法有哪些&#xff1f; 立体匹配是计算机视觉中从双目图像中获取深度信息的关键技术&#xff0c;其经典算法按技术路线可分为以下几类&#xff0c;每类包含若干代表性方法&#xff1a; 1.1 基于区域的匹配算法&#xff08;Local Methods&#xff09; 通过…

    day12 leetcode-hot100-19(矩阵2)

    54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; 1.模拟路径 思路&#xff1a;模拟旋转的路径 &#xff08;1&#xff09;设计上下左右方向控制器以及边界。比如zy1向右&#xff0c;zy-1向左&#xff1b;sx1向上&#xff0c;sx-1向下。上边界0&#xff0c;下边界hang-1&a…

    密钥管理系统在存储加密场景中的深度实践:以TDE透明加密守护文件服务器安全

    引言&#xff1a;数据泄露阴影下的存储加密革命 在数字化转型的深水区&#xff0c;企业数据资产正面临前所未有的安全挑战。据IBM《2025年数据泄露成本报告》显示&#xff0c;全球单次数据泄露事件平均成本已达465万美元&#xff0c;其中存储介质丢失或被盗导致的损失占比高达…

    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系列主打低端市场&#xff0c;系统无任何GMS程序&#xff0c;也不支持直接开启或者安装谷歌服务等功能&#xff0c;对于国内部分经常使用谷歌服务商店的小伙伴非常不友好。涉及机型有酷派Cool20/Cool20S /30/40/50/60等旗下多个设备。好在这些机型运行的系统都是安卓11…

    LabVIEW旋转机械智能监测诊断系统

    采用 LabVIEW 开发旋转机械智能监测与故障诊断系统&#xff0c;通过集品牌硬件与先进信号处理技术&#xff0c;实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性&#xff0c;解决了复杂工业环境下信号干扰强、故障特征提取难等问题&#xff0c;为…

    【芯片设计中的跨时钟域信号处理:攻克亚稳态的终极指南】

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

    接地气的方式认识JVM(一)

    最近在学jvm&#xff0c;浮于表面的学了之后&#xff0c;发现jvm并没有我想象中的那么神秘&#xff0c;这篇文章将会用接地气的方式来说一说这些jvm的相关概念以及名词解释。 带着下面两个问题来阅读 认识了解JVM大致有什么在代码运行时的都在背后做了什么 JVM是个啥&#xf…

    JAVA:Kafka 消息可靠性详解与实践样例

    🧱 1、简述 Apache Kafka 是高吞吐、可扩展的流处理平台,在分布式架构中广泛应用于日志采集、事件驱动和微服务解耦场景。但在使用过程中,消息是否会丢?何时丢?如何防止丢? 是很多开发者关心的问题。 Kafka 提供了一套完整的机制来保障消息从生产者 ➜ Broker ➜ 消费…

    Electron 桌面程序读取dll动态库

    序幕&#xff1a;被GFW狙击的第一次构建 当我在工位上输入npm install electron时&#xff0c;控制台跳出的红色警报如同数字柏林墙上的一道弹痕&#xff1a; Error: connect ETIMEDOUT 104.20.22.46:443 网络问题不用愁&#xff0c;请移步我的另外文章进行配置&#xff1a;…

    HTTP 与 HTTPS 深度解析:原理、实践与大型项目应用

    1. HTTP 与 HTTPS 基础概念 1.1 HTTP&#xff08;超文本传输协议&#xff09; 定义&#xff1a;应用层协议&#xff0c;基于 TCP/IP 通信&#xff0c;默认端口 80 特点&#xff1a; 无状态协议&#xff08;需 Cookie/Session 维护状态&#xff09; 明文传输&#xff08;易被…

    API Gateway CLI 实操入门笔记(基于 LocalStack)

    API Gateway CLI 实操入门笔记&#xff08;基于 LocalStack&#xff09; Categories: Cloud Google Rank Proof: No Last edited time: May 26, 2025 4:18 AM Status: Early draft Tags: aws 主要先简单的走一下流程&#xff0c;熟悉一下在 terminal 操作 API Gateway local…

    数据分析案例-基于红米和华为手机的用户评论分析

    &#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

    深度学习入门:从零搭建你的第一个神经网络

    深度学习入门&#xff1a;从零搭建你的第一个神经网络 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 深度学习入门&#xff1a;从零搭建你的第一个神经网络摘要引言第一章&#xff1a;神经网络基础原理1.1 神经元…