详解JavaScript中的数组

news2024/11/17 21:29:25

第7章 数组

JavaScript数组索引基于32位数值,以0开头,最大索引2^32-2,最大容纳4294967295,大约42亿个。

JavaScript数组是动态的,根据需要增长或缩减,可能是稀疏的,有length属性。

用数字索引来访问数组比一般访问常规对象属性要快得多。

7.1 创建数组

7.1.1 直接量

直接量:var empty=[],var primes=[2,3,5,7,11]等等

直接量中不一定都是常量,也可以是表达式

可以包含对象直接量或者其他数组直接量

省略数组直接量中某个值,省略元素被赋予undefined值

数组直接量语法允许有可选的结尾的逗号,故[,,]只有两个元素而非三个

7.1.2 调用构造函数Array()

调用时没有参数

var a=new Array();等同于数组直接量[]

调用时有一个数值参数,指定长度

当预先知道所需元素的个数时,用来预分配一个数组空间。

var b=new Array(10);

显式指定多个数组元素或数组非数值元素

var c=new Array(5,4,3,2,1,"testing,testing");

字面量比Array()构造函数简单多了。

7.2 数组元素的读和写

普通读写太熟悉了,不介绍了。

记住,数组是对象的特殊形式,a.[0]访问数组就像访问对象属性一样。

常规对象也可以这样用:

数组也是对象,所有索引都是属性名,索引会自动维护一个length属性值,只有非负整数才能是索引,所以如下数组长度是5而不是6.

7.3 稀疏数组

稀疏数组就是包含从0开始的不连续索引的数组,通常数组length属性值代表元素个数,如果数组是稀疏的,length属性值大于元素的个数。可以用Array()构造函数或简单的指定数组的索引值大于当前的数组长度来创建稀疏数组。

足够稀疏的数组通常在实现上比稠密的数组更慢,内存利用率更高,在这样的数组中查找元素的时间与常规对象属性查找时间一样长。

数组元素中undefined和不存在的微妙区别

当前浏览器控制台显示相同

7.4 数组长度

length通常比最大索引+1

给一个数组赋值,索引i>=length时,length设为i+1

设置length为=n的元素删除

如果想让数组成为一个只读,或者不可配置的对象,可以用对象中的方法:

Object.defineProperty(a,"length",{writable:false})

Object.seal()和Object.freeze()方法

7.5 数组元素的添加和删除

添加元素最简单的方法:为新索引赋值

push()方法,数组末尾增加

在数组末尾增加一个或多个元素

unshift()方法,数组首部插入元素

删除数组元素

删除数组元素与赋undefined类似,delete不会修改length属性,也不会将元素从高索引位移下来填充已删除属性留下的空白,删除一个元素,数组变成稀疏数组。

pop()和shift()从数组尾部和头部删除数据

删除数据后,length也跟着变化

7.6 数组遍历

最常用for循环遍历数组

使用数组元素之前检测它们,想要排除null,undefined和不存在的元素

for...{

if(!a[i]) continue;//跳过null,undefined和不存在的元素

}

forEach()使数组拥有简单而强大的函数式编程风格

x是遍历的时候,每一项的值

7.7 多维数组

不真的支持,但可以用数组的数组来近似表示。

两次[]来表示,访问特定数值matrix[x][y].

7.7.1使用二维数组作为九九乘法表

7.8 数组方法

7.8.1 join()

Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串。

可以指定一个可选的字符串来分割数组的各个元素,如果不指定,则用逗号。

Array.join()方法是String.split()方法的逆向操作,后者是将字符串分割成若干块来创建一个数组。

7.8.2 reverse()

Array.reverse()方法将数组的元素颠倒顺序,返回逆序数组,采取替换,并没有重新创建数组。

7.8.3 sort(),将数组中元素排序并返回数组

以字母表顺序排序

按照其他排序需要传递一个比较器,两个参数的函数,并返回一个 正数,负数,或0.

7.8.4 concat(),连接多个数组并返回新数组

7.8.5 slice(s,e),指定数组的片段

两个参数包左不包右

7.8.6 splice(),插入或删除元素

第一个参数表示出入或删除的起始位置,第二个参数表示从数组中删除的个数

前两个参数指定了需要删除的数组元素,后面紧跟多个需要插入的元素

7.8.7 push()和pop()

已了解,末尾增删,可以当做栈来用,先进后出。

7.8.8 unshift()和shift()

同上,首部的增删。

7.8.9 toString()和toLocaleString()

任何对象都有toString()方法,将每个元素转换为字符串用逗号隔开输出。

toLocaleString()是toString()本地化版本

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

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

相关文章

Linux下的驱动开发一

设备驱动 设备驱动程序(Device Driver)是操作系统中的一种软件组件,负责管理和控制计算机硬件设备的工作。驱动程序通过提供操作系统和硬件设备之间的接口,使得操作系统和应用程序能够与硬件设备进行交互,而无需了解硬…

【智能大数据分析 | 实验二】Spark实验:部署Spark集群

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…

网易云多久更新一次ip属地

‌在数字化时代,网络成为了我们日常生活中不可或缺的一部分。无论是社交娱乐还是工作学习,IP地址作为网络身份的象征,都扮演着重要的角色。对于网易云音乐这样的热门应用来说,IP属地的显示不仅关乎用户体验,也涉及用户…

Supervisor进程管理工具安装

Supervisor进程管理工具安装 一、Supervisor概况及作用1.概况2.主要作用1)、进程管理(1). 启动与停止进程(2). 自动重启进程(3). 进程状态监控 2)、日志管理(1).集中化日志记录 3)、资源管理与优化(1). 控制进程资源使用 二.安装 Supervisor1…

小白学大模型RAG:十大步骤分析GraphRAG的工作原理

对于普通的RAG,也就是前面课程讲的RAG,它的原理是通过将文本进行切分和向量化,通过计算文本之间的向量相似度,从而得到两个文本之间的语义相似度,从知识库中找出跟问题语义相似的知识点,再送给LLM得出最终答…

学习Java (五)

1.学习封装 package com.msb.test07; //封装 public class Girl {private int age; // 赋值public void setAge(int age){if(age > 30){this.age 18;}else{this.age age;}} // 读取public int getAge(){return age;} }package com.msb.test07;public class Test {p…

【Linux 报错】“make: ‘xxxx‘ is up to date.” 解决办法

一、报错原因 我们使用 make 命令,想要将 text.c 文件编译形成 可执行文件 text 时,报错如下 make: test is up to date. 中文含义:test 文件已经达到最新状态 意思是: test.c 文件里面的 所有源代码都没有修改过,你…

c++11~c++20 numeric_limits

在c中应该尽量少使用宏&#xff0c;用模板取而代之是明知的选择。我们可以使用numeric_limits来获取最大值和最小值&#xff0c;例如 #include <iostream> #include <limits> #include <iostream> using namespace std;int main() {cout << "int…

Go基础学习04-变量重声明;类型转换;类型断言;Unicode代码点;类型别名;潜在类型

目录 变量重声明 类型断言 类型转换 类型转换注意事项 Unicode代码点 类型别名、潜在类型 类型别名的意义 变量重声明 编写代码&#xff1a; package mainimport "fmt"var container []string{"Beijing", "Shanghai"}func main() {fmt.Pr…

Qt开发技巧(八)自带对话框的美化,内置快捷代码段,巧用匿名槽函数,另类动态换肤,资源动态加载

继续讲一些Qt开发中的技巧操作&#xff1a; 1.自带对话框的美化 Qt中有一些自带的对话框&#xff0c;比如文件选择对话框&#xff0c;颜色选择对话框等等&#xff0c;这些对话框看着跟系统的对话框没太大差别&#xff0c;实际这是Qt有意为之&#xff0c;为的是跟系统保持一致。…

欺诈文本分类检测(十七):支持分类原因训练

1. 引言 前文数据校正与增强进行了数据增强&#xff0c;本文将使用增强后的数据对模型进行进一步训练&#xff0c;以便得到能同时预测出分类标签、欺诈者、分类原因多个信息的模型。 为此&#xff0c;我们需要对整个训练过程进行调整&#xff0c;包括&#xff1a; 交叉训练逻…

苹果端侧AI布局深度分析

苹果 - 国际巨头的端侧 AI布局 深度分析 1.1.1 苹果AI&#xff1a;模型侧&#xff1a;MM1 3月&#xff0c;苹果发布多模态大模型MM1&#xff0c;拥有高达300亿参数。MM1融合密集模型与MoE变体&#xff0c;涵盖300亿、70亿、30亿参数版。MM1预训练指标领先&#xff0c;在多个多…

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…

基于SpringBoot+Vue的高校实习管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

一次眼睛受损然后恢复的过程

由于多年没有社交比较宅,多年长期盯着电脑和手机,没有保护好眼睛 之前早上醒来有一段时间我眼睛老是分泌各种乱起八遭的东西,导致我眼睛看不清, 2023年3月有天的早上,我又不小心眼睛揉出血了,出门上班路上的时候才知道有这个问题,第二天早上就挂了去了眼科,医生给我开了如下的药…

单细胞转录组|scATAC-seq 数据整合

引言 本文在此展示了如何将多个源自人类外周血单核细胞的单细胞染色质数据集进行整合。其中一个数据集是通过10x Genomics的多组学技术获得的&#xff0c;它涵盖了每个细胞的DNA可及性和基因表达数据。另一个数据集则是通过10x Genomics的单细胞ATAC测序(scATAC-seq)技术得到的…

Mybatis-Plus自动填充时间的配置类

引言&#xff1a;在现代软件开发中&#xff0c;数据库操作是不可或缺的一部分。为了确保数据的准确性和完整性&#xff0c;我们常常需要在数据库记录中添加时间戳&#xff0c;例如创建时间和更新时间。MyBatis-Plus作为一个流行的持久层框架&#xff0c;提供了灵活的机制来实现…

官方权威解读|CNAS-CL01计量溯源性部分解读,供CNAS软件测试实验室参考

CNAS-CL01《检测和校准实验室能力认可准则》是软件测试实验室申请CNAS资质&#xff0c;建设符合CNAS要求的实验室质量管理体系时必须要参考的一部强制性准则。CNAS-CL01一共分为五大核心部分&#xff1a;通用要求、结构要求、资源要求、过程要求和管理体系要求。前面的文章中我…

【零散技术】微信支付保姆教程(一)

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 微信支付十余年&#xff0c;早已成为国内必不可少的支付工具。但是开发对接中 繁杂的各类参数与文档&#xff0c;以及各种证书的申请&#xff0c;着实也成了不少开发者的噩梦&#xff0c;那么今天我们来看看&#xff0c;如何申…

3-3 AUTOSAR RTE 对SR Port的作用

返回总目录->返回总目录<- 一、前言 RTE作为SWC和BSW之间的通信机构,支持Sender-Receiver方式实现ECU内及ECU间的通信。 对于Sender-Receiver Port支持三种模式: 显式访问:若运行实体采用显示模式的S/R通信方式,数据读写是即时的;隐式访问:当多个运行实体需要读取…