【JavaScript速成之路】JavaScript数组

news2024/11/15 21:43:57

在这里插入图片描述

📃个人主页:「小杨」的csdn博客
🔥系列专栏:【JavaScript速成之路】

🐳希望大家多多支持🥰一起进步呀!


文章目录

  • 前言
    • 1,初识数组
      • 1.1,数组
      • 1.2,创建数组
      • 1.3,访问数组
      • 1.4,遍历数组
    • 2,数组操作
      • 2.1,修改数组的长度
      • 2.2,新增或修改数组元素
      • 2.3,筛选数组元素
      • 2.4,删除指定的数组元素
      • 2.5,反转数组元素顺序
    • 3,解构赋值
    • 4,数组排序
      • 4.1,冒泡排序
      • 4.2,插入排序
    • 5,二维数组
      • 5.1,二维数组创建
      • 5.2,二维数组求和
      • 5.3,二维数组转置
  • 结语


前言

📜前言:小杨在上一篇带着大家一起学习了JavaScript中的流程控制,想必大家对JavaScript的流程控制已经有所了解了,那么今天我们将继续带着大家学习一下JavaScript中的数组的相关知识,希望大家收获多多!


1,初识数组

1.1,数组

对于数组是什么的这个问题,你只需要简单了解以下两点:

1,数组(Array)就是一组数据的集合存储在单个变量下的方式。

2,数组(Array)是一种复杂的数据类型,属于Object(对象)类型。


1.2,创建数组

1,利用new Array( )创建数组

var arr1 = new Array();
var arr2 = new Array('A','B','C','D');

2,利用字面量创建数组 [ ]

var arr1 = [];
var arr2 = ['A','B','C','D'];

知识点:

  • 数组元素之间用逗号分隔。
  • 数组中可以存放任意类型的元素。
//在数组中保存各种数据类型
var arr2 = [1,'1',true,null,undefined];

//在数组中保存数组
var arr2 = [1,2,[3,4,5],6];

1.3,访问数组

在数组中,每个元素都有索引(或者下标),数组中的元素使用索引来进行访问。

数组中的索引是一个数字,从0开始,到数组长度-1结束。

为了更好地了解数组是如何访问的,示例如下:

<script>
    var arr = ['苹果','香蕉','西瓜','桔子','石榴'];
    console.log(arr[0]);
    console.log(arr[1]);
    console.log(arr[2]);
    console.log(arr[3]);
    console.log(arr[4]);
    console.log(arr[5]);
</script>

示例结果:

image-20221009160636695


1.4,遍历数组

数组遍历就是将数组中的每一个数组元素都访问一遍。

为了更好地理解数组是如何遍历的,示例如下:

<script>
    var arr = [1,2,3,4,5,6];
    for(var i = 0; i < arr.length; i++){
        console.log('arr[' + i + '] = ' + arr[i]);
    }
</script>

示例结果:

image-20221009161705800


2,数组操作

2.1,修改数组的长度

数组名.length 不仅可以获取数组的长度 ,也可以进行数组长度的修改。

修改数组的长度分为两种,即修改后的数组长度大于原数组或者小于原数组这两种。

扩大数组的长度就是扩容,比较容易理解,但要注意当修改后的数组长度小于原数组时,数组会舍弃掉多余的元素。

为了更好地理解上述语法,示例如下:

<script>
    //当修改后的数组长度大于原数组
    var arr1 = ['a','b','c','d'];
    arr1.length = arr1.length * 2;
    console.log(arr1);

    //当修改后的数组长度小于原数组
    var arr2 = ['a','b','c','d'];
    arr2.length = arr2.length / 2;
    console.log(arr2);
</script>

示例结果:

image-20221009163210952

知识点:当访问数组的空元素时,返回结果为undefined,而在JavaScript中,数组的空元素用empty来表示。

为了更好的理解空元素出现的情况,如下4种情况均会出现空元素:

<script>
    //情况1:在使用字面量创建数组出现空字符串
    var arr1 = [1,2, ,4];
    console.log(arr1);

    //情况2:在new Array() 中传入数组长度的参数
    var arr2 = new Array(4);
    console.log(arr2);

    //情况3:为数组添加索引不连续的元素
    var arr3 = [1];
    arr3[3] = 4;
    console.log(arr3);
    
    //情况4:修改数组长度大于原数组长度
    var arr4 = [1,2];
    arr4.length = 4;
    console.log(arr4);
</script>

示例结果:

image-20221009164222981


2.2,新增或修改数组元素

新增或修改数组元素可以通过数组的索引来实现,如果给定的索引大于数组的最大索引,则表示新增元素,否则就表示修改元素。

为了更好地理解上述语法,示例如下:

<script>
    //新增数组元素
    var arr1 = ['red','blue','yellow'];
    arr1[3] = 'green';
    console.log(arr1);

    //修改数组元素
    var arr2 = ['red','blue','yellow'];
    arr2[0] = 'pink';
    console.log(arr2);
</script>

示例结果:

image-20221009164820328


2.3,筛选数组元素

在日常中,我们经常遇到筛选的需求。例如查询一个班成绩及格的学生人数,这就需要对学生成绩进行筛选。

为了更好的理解数组是如何筛选的,示例如下:

<script>
    //筛选比5大的数组元素
    var arr = [1,2,3,4,5,6,7,8,9];
    var newArr = [];
    var j = 0;
    for(var i = 0; i < arr.length; i++){
        if(arr[i] > 5){
            newArr[j] = arr[i];
            j++;
        }
    }
    console.log(newArr);
</script>

示例结果:

image-20221009165517024


2.4,删除指定的数组元素

删除数组中的指定元素的原理与筛选数组元素相类似,删除数组中的指定元素需要先对数组元素进行筛选操作,然后再进行删除操作。

为了更好地理解数组指定元素是如何删除的,示例如下:

<script>
    //删除数组中为5的数组元素
    var arr = [1,2,3,4,5,6,7,8,9];
    var newArr = [];
    for(var i = 0; i < arr.length; i++){
        if(arr[i] !== 5){
            newArr[newArr.length] = arr[i];
        }
    }
    console.log(newArr);
</script>

示例结果:

image-20221009165954866


2.5,反转数组元素顺序

反转数组元素,顾名思义就是将原数组元素的顺序反转。

实现数组元素的反转其实比较简单,示例如下:

<script>
    //反转数组中的数组元素
    var arr = [1,2,3,4,5,6,7,8,9];
    var newArr = [];
    for(var i = arr.length - 1; i >= 0; i--){           
            newArr[newArr.length] = arr[i];   
    }
    console.log(newArr);
</script>

示例结果:

image-20221009170626912


3,解构赋值

解构赋值是由ES6提供的一种对变量和声明与赋值方式。

若把数组[1,2,3]中的元素分别赋值给a,b,c,传统做法是单独声明变量和赋值。

//传统方式
var arr = [1,2,3];
var a = arr[0];
var b = arr[1];
var c = arr[2];

//解构赋值
[a,b,c] = [1,2,3];

上述代码可以看出,传统方式要完成以上功能,需要4行代码,而若使用解构赋值只需1行代码。

解构赋值时,JavaScript会将“=”右侧“[]"中的元素依次赋值给左侧”[]"中的变量。

  1. 当左侧的变量数量少于右侧的元素个数时,则忽略多余的元素。
  2. 当左侧的变量数量多于右侧的元素个数时,则多余的变量会被初始化为undefined。

解构赋值时右侧的内容可以是一个变量名,或者通过解构赋值完成两个变量数值的交换。

为了更好理解解构赋值的使用,示例如下:

<script>
    //当左侧的变量数量少于右侧的元素个数
    var arr = [1,2,3];
    [a,b] = arr;
    console.log(a,b);

    //当左侧的变量数量多于右侧的元素个数
    var arr = [1,2,3];
    [a,b,c,d] = arr;
    console.log(a,b,c,d);

    //两个变量数值的交换
    var num1 = 2;
    var num2 = 3;
    [num1,num2] = [num2,num1];
    console.log(num1,num2);
</script>

示例结果:

image-20221009210431167


4,数组排序

4.1,冒泡排序

冒泡排序过程中,按照要求从小到大排序或从大到小排序,不断比较数组中相邻两个元素的值。

为了更好地理解冒泡排序的实现原理,示例如下:

<script>
    var arr1 = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
    for(var i = 1; i < arr1.length; i++){				//控制需要比较的轮数
        for(var j = 0; j < arr1.length - i; j++){		//控制参与比较的元素
            if(arr1[j] > arr1[j+1]){					//比较相邻的两个元素
                var temp = arr1[j+1];
                arr1[j+1] = arr1[j];
                arr1[j] = temp;
            }
        }
    }
    console.log(arr1);
</script>

示例分析动态图:

示例结果:

image-20221009195233929


4.2,插入排序

插入排序是冒泡排序的优化。

实现原理:通过构造有序数组元素的存储,对未排序的数组元素,在已排序的数组中从最后一个元素向第一个元素遍历,找到相应位置并插入。其中,待排序数组的第1个元素会被看作是一个有序的数组 ,从第2个至最后一个元素被看作是一个无序数组。

为了更好地理解插入排序的实现原理,示例如下:

<script>
    var arr1 = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
	//按照
    for(var i = 1; i < arr1.length; i++){
        for(var j = i; j > 0; j--){
            if(arr1[j-1] > arr1[j]){
                var temp = arr1[j];
                arr1[j] = arr1[j-1];
                arr1[j-1] = temp;
            }
        }
    }
    console.log(arr1);
</script>

示例分析动态图:

示例结果:

image-20221009195731066


5,二维数组

5.1,二维数组创建

1,利用Array创建数组

var info = new Array(
    new Array('Tom',18),
    new Array('Bob',19)
);

2,利用字面量[]创建数组

var nums = [[1,2,3],[4,5,6]];

5.2,二维数组求和

二维数组求和的原理跟一维数组求和一样,就是遍历二维数组的每个元素,然后进行求和操作,而这个需要使用双层循环来控制二维数组的索引值。

为了更好地理解二维数组求和的操作,示例如下:

<script>
    var sum = 0;
    var arr = [[12,33,44],[25,35,14],[12,23,34]];
    for(var i = 0; i < arr.length; i++){
        for(var j = 0; j < arr[0].length; j++){
            sum += arr[i][j];
        }
    }
    console.log(sum);
</script>

示例结果:

image-20221009203147396


5.3,二维数组转置

二维数组的转置指的是将二维数组的横向元素保存为纵向元素。

为了理解二维数组的转置,示例如下:

<script>
    var arr = [['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l']];
    var ret = [];
    for(var i = 0; i < arr[0].length; i++){
        ret[i] = [];
        for(var j = 0; j < arr.length; j++){
            ret[i][j] = arr[j][i];
        }
    }
    console.log(ret);
</script>

示例结果:

image-20221009202708748


结语

这就是本期博客的全部内容啦,想必大家已经对JavaScript中的数组的相关内容有了全新地认识和理解吧,如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!
在这里插入图片描述


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

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

相关文章

SCI期刊收不收费也有门道,你知道吗?

什么是OA期刊? OA期刊是在互联网上在线出版的学术刊物&#xff0c;英文全称是OpenAccess Journal&#xff0c;中文译为“开放存取期刊”。OA期刊不同于传统的学术期刊如《自然》、《科学》等&#xff0c;采取的是向读者收费的运营模式&#xff0c;读者只有付费订阅&#xff0…

【MySQL】表的数据处理

哈喽&#xff0c;大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 MySQL 数据表中数据的基本处理的操作&#xff0c;数据表的增删改查&#xff0c;更多相关知识敬请期待&#xff1a;保护小周ღ *★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★*一、 添加数据&a…

极简RSS订阅器Miniflux

什么是 Miniflux &#xff1f; Miniflux 是一个极简主义的 RSS 阅读器。它简单、快速、轻便且非常易于使用。Miniflux 是静态编译的单个二进制文件&#xff0c;没有使用任何复杂的框架&#xff0c;也没有外部依赖&#xff0c;简单、快速、轻巧且超级容易安装。支持 Atom、RSS 1…

Docker(五)--Docker网络--源生网络、自定义网络

文章目录一、源生网络1.docker 的网桥---bridge2.host网络模型3.none 网络模型二、自定义网络模型1.bridge驱动2.指定网关和子网3.自定义网络其中内嵌dns解析4.不同网段的容器通信一、源生网络 我们先把server7上的harbor仓库down掉&#xff0c;然后查看网络&#xff0c;可以看…

微服务导学

一、微服务导学1.1 对比单体架构与分布式架构单体架构将业务的所有功能集中再一个项目中开发&#xff0c;打成一个包部署。分布式架构缺点&#xff1a; 模块多导致部署麻烦&#xff1b;架构复杂&#xff0c;难度大1.2 微服务经过良好架构设计的分布式架构方案&#xff0c;微服务…

【Springboot系列】解析Springboot事件机制,从入门到大师

系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 继续写Springboot系列&#xff0c;争取早点结束。 1、是什么 Spring的事件&#xff08;Application Event&#xff09;为Bean与Bean之间的消息通信提供了支持 事件机制中有三种角色&#x…

RTOS中事件集的实现原理以及实用应用

事件集的原理 RTOS中事件集的实现原理是通过位掩码来实现的。事件集是一种用于在任务之间传递信号的机制。在RTOS中&#xff0c;事件集通常是一个32位的二进制位向量。每个位都代表一个特定的事件&#xff0c;例如信号、标志、定时器等。 当一个任务等待一个或多个事件时&…

Hbase备份与恢复工具Snapshot的基本概念与工作原理

数据库都有相对完善的备份与恢复功能。备份与恢复功能是数据库在数据意外丢失、损坏下的最后一根救命稻草。数据库定期备份、定期演练恢复是当下很多重要业务都在慢慢接受的最佳实践&#xff0c;也是数据库管理者推荐的一种管理规范。HBase数据库最核心的备份与恢复工具——Sna…

Spark+Vue+Springboot 协同过滤额音乐推荐大数据深度学习项目

一、项目背景 随着互联网的发展,大数据的到来,传统的音乐行业受到了很大的冲击,原有的音乐数字化给人们生活带来了极大的便利。随着数字音乐的兴起,各大音乐平台层出不穷,人们在音乐平台上收听音乐的时,常常因为歌曲信息繁杂,而不能找到自己想听的音乐。为了解决这个问题,音乐…

Elasticsearch:使用 Logstash 构建从 Kafka 到 Elasticsearch 的管道 - Nodejs

在我之前的文章 “Elastic&#xff1a;使用 Kafka 部署 Elastic Stack”&#xff0c;我构建了从 Beats > Kafka > Logstash > Elasticsearch 的管道。在今天的文章中&#xff0c;我将描述从 Nodejs > Kafka > Logstash > Elasticsearch 这样的一个数据流。在…

modbus转profinet网关连接ABB变频器在博图程序案例

在博图里PLC无需编程利用兴达易控modbus转Profinet网关,将ABB变频器接入到西门子网络中.用到设备为西门子1200PLC&#xff0c;ABB变频器及兴达易控Modbus转profinet网关一个;兴达易控Modbus转profinet协议转换器&#xff08;XD-MDPN100&#xff09;一台 打开博图添加1200PLC&am…

121.(leaflet篇)leaflet结合echarts4迁徙图

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>

【数据挖掘与商务智能决策】第二章 特征工程与数据预处理

数据预处理 非数值类型数据处理 Get_dummies哑变量处理 1. 简单示例&#xff1a;“男”和“女”的数值转换 import pandas as pd df pd.DataFrame({客户编号: [1, 2, 3], 性别: [男, 女, 男]}) df客户编号性别01男12女23男 df pd.get_dummies(df, columns[性别]) df客户…

DetectGPT:使用概率曲率的零样本机器生成文本检测

DetectGPT的目的是确定一段文本是否由特定的llm生成&#xff0c;例如GPT-3。为了对段落 x 进行分类&#xff0c;DetectGPT 首先使用通用的预训练模型&#xff08;例如 T5&#xff09;对段落 ~xi 生成较小的扰动。然后DetectGPT将原始样本x的对数概率与每个扰动样本~xi进行比较。…

浏览器主页被hao123劫持的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

Redis哨兵(Sentinel)模式

前言 上一期实现了Redis的主从复制架构&#xff0c;由于主从模式在主节点宕机故障时整个Redis服务都不能再执行写操作&#xff0c;而无法保证Redis在整个系统中的高可用。 Redis提供了Sentinel哨兵机制来解决以上问题&#xff0c;当哨兵服务监测到master下线或宕机&#xff0…

汽车标定知识整理(二):CCP报文基本命令介绍

目录 一、基本命令 CRO命令报文的基本命令表&#xff1a; 二、基本命令与可选命令帧格式介绍 1、CONNECT——建立连接&#xff08;0x01&#xff09; 2、GET_CPP_VERSION——获取CCP版本&#xff08;0x1B&#xff09; 3、SET_MTA——设置内存传输地址&#xff08;0x02&#…

FPGA_边沿监测理解

一、简易频率计设计中为什么一定要获取下降沿?gate_a:实际闸门信号gate_a_stand:将实际闸门信号打一拍之后的信号gate_a_fall_s:下降沿标志信号cnt_clk_stand: Y值&#xff0c;即在实际闸门信号下&#xff0c;标准时钟信号的周期个数cnt_clk_stand_reg:保存Y值的寄存器核心问题…

展示企业情况的BI数据可视化大屏怎么做?

做综合展示企业情况的BI数据可视化大屏&#xff0c;就意味着要综合展示多个子公司或者部门的数据情况。首先要解决的就是多系统数据的整合、数据孤岛的束缚&#xff0c;其次才是数据分析模型构建、BI数据可视化大屏报表的制作。 1、整合多系统数据&#xff0c;消除数据孤岛现象…

flink大数据处理流式计算详解

flink大数据处理 文章目录flink大数据处理二、WebUI可视化界面&#xff08;测试用&#xff09;三、Flink部署3.1 JobManager3.2 TaskManager3.3 并行度的调整配置3.4 区分 TaskSolt和parallelism并行度配置四、Source Operator(资源算子)五、Sink Operator(输出算子)六、Flink滑…