JavaScript数组全攻略

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

​ 

目录

✨ 前言

数组的定义

创建数组

1. 数组字面量

2. Array构造函数

3. Array.of()

4. Array.from()

读取元素

写入元素

数组长度

清空数组

添加元素

删除元素

splice()

遍历数组

for循环

for...of循环

forEach()

map()/filter()/reduce()

搜索元素

indexOf()/lastIndexOf()

find()

findIndex()

includes()

排序数组

reverse()

sort()

数组和字符串转换

join()

split()

映射数组

map()

过滤数组

filter()

规约数组

reduce()

拷贝数组

浅拷贝

深拷贝

多维数组

稀疏数组

类数组对象

✨ 结语


 

✨ 前言

        对象允许存储键值集合,这很好。

        但很多时候我们发现还需要 有序集合,里面的元素都是按顺序排列的。例如,我们可能需要存储一些列表,比如用户、商品以及 HTML 元素等。

        这里使用对象就不是很方便了,因为对象不能提供能够管理元素顺序的方法。我们不能在已有的元素“之间”插入一个新的属性。这种场景下对象就不太适用了。

        这时一个特殊的数据结构数组(Array)就派上用场了,它能存储有序的集合。

数组的定义

数组是存储数据的有序列表,每个元素都有对应的索引位置。

创建数组

1. 数组字面量

使用[]创建数组最简单直观:

let arr = [1, 2, 3];

2. Array构造函数

可以指定数组长度或元素:

let arr1 = new Array(3); // 创建长度为3的空数组

let arr2 = new Array(1, 2, 3); // 使用参数初始化数组

3. Array.of()

将参数转换为数组元素:

let arr = Array.of(1, 2, 3); // [1, 2, 3]

4. Array.from()

将类数组对象或可迭代对象转换为数组:

let arr = Array.from('foo'); // ['f', 'o', 'o']

 

读取元素

可以通过索引读取元素,从0开始:

let arr = [1, 2, 3];

let first = arr[0]; // 1
let second = arr[1]; // 2

写入元素

同样通过索引可以修改写入元素:

let arr = [1, 2, 3];

arr[0] = 'first'; 
arr[1] = 'second';

数组长度

length属性表示当前数组的长度:

let arr = [1, 2, 3];

arr.length; // 3

清空数组

将length重置为0即可清空数组:

let arr = [1, 2, 3];
arr.length = 0; // 清空数组

 

添加元素

使用push()和unshift()可以向数组末尾或开头添加一个或多个元素:

let arr = [1, 2];

arr.push(3); // 尾部添加一个元素
arr.unshift(0); // 头部添加一个元素

删除元素

使用pop()和shift()可以删除数组末尾或开头的元素:

let arr = [1, 2, 3];

arr.pop(); // 删除最后一个元素
arr.shift(); // 删除第一个元素

 

splice()

splice()可以删除任意位置的元素:

let arr = [1, 2, 3, 4];

arr.splice(2, 1); // 从索引2开始删除1个元素

splice()也可以实现插入、替换等功能。 

遍历数组

遍历数组常用的方法:

for循环

使用传统的for循环根据索引遍历:

for(let i = 0; i < arr.length; i++) {
  // arr[i] 访问元素
}

 

for...of循环

使用for...of直接遍历元素:

for(let a of arr) {
  // a 为数组元素
}

forEach()

数组的forEach()方法遍历:

arr.forEach(function(element) {
  // element为数组元素
});

 

map()/filter()/reduce()

数组的高阶函数也可以遍历数组

搜索元素

indexOf()/lastIndexOf()

搜索元素第一次或最后一次出现的索引:

let arr = [1, 2, 1];
arr.indexOf(1); // 0
arr.lastIndexOf(1); // 2

find()

找到第一个满足条件的元素:

let found = arr.find(x => x > 2);

 

findIndex()

找到第一个满足条件元素的索引:

let index = arr.findIndex(x => x > 2);

includes()

检查数组是否包含某元素:

[1,2,3].includes(2); // true

 

排序数组

reverse()

反转数组顺序:

let arr = [1, 2, 3];
arr.reverse(); // [3, 2, 1]

sort()

默认按字符串排序:

let arr = [3, 1, 2];  
arr.sort(); // [1, 2, 3]

 可以传入比较函数自定义排序逻辑。

数组和字符串转换

join()

join()可以将数组转换为字符串:

let arr = [1, 2, 3];

arr.join(); // "1,2,3"
arr.join('-'); // "1-2-3"

split()

split()可以将字符串分割成数组:

"a-b-c".split('-'); // ['a', 'b', 'c']

 

映射数组

map()

map()将数组元素映射到新数组:

let arr = [1, 2, 3]; 

let mapped = arr.map(x => x * 2); // [2, 4, 6]

不会改变原数组

过滤数组

filter()

filter()过滤数组元素:

let arr = [1, 2, 3];

let filtered = arr.filter(x => x > 2); // [3]

 

规约数组

reduce()

reduce()可以将数组组合为单个值:

let arr = [1, 2, 3];

let sum = arr.reduce((a, b) => a + b); // 6

拷贝数组

浅拷贝

使用slice()可以浅拷贝数组:

let arr2 = arr1.slice();

 

深拷贝

可以递归实现深拷贝:

function deepCopy(arr) {
  // 递归拷贝算法
}

多维数组

数组可以包含其他数组,形成多维数组:

let arr = [
  [1, 2],
  [3, 4]
];

 访问多维数组需要多层索引:

arr[1][0]; // 返回3

遍历多维数组需要嵌套循环:

for (let i = 0; i < arr.length; i++) {
  for (let j = 0; j < arr[i].length; j++) {
    // 遍历 sub array
  }
}

 

稀疏数组

当数组的元素不连续时,就会形成稀疏数组:

let arr = [];
arr[0] = 1;
arr[3] = 4;

数组的长度为4,但中间有空隙。

遍历稀疏数组需要检查元素是否存在:

for(let i = 0; i < arr.length; i++) {
  if(arr.hasOwnProperty(i)) {
    // 处理存在的元素
  }
}

 

类数组对象

拥有长度和索引元素的对象,类似于数组:

let obj = {
  0: 'first',
  1: 'second',
  length: 2
};

可以使用Array.from()转换为数组。 

✨ 结语

        

        本文全面介绍了JavaScript数组的各种功能点,现做一个简要总结。

        数组是一种存储数据的有序列表,可以通过索引进行访问。我们首先介绍了数组的各种创建方式。

        然后详细讲解了数组元素的读取和写入,以及获取数组长度和清空数组的方法。

        对于修改数组,我们涵盖了尾部/头部添加,中间删除,splice的用法。

        遍历数组常用的有for循环、forEach、for...of等。搜索数组可以用indexOf、find、includes等。

        排序数组有reverse和sort两种方法。转换数组可以用join和split。

        映射数组可以用map实现,过滤可以用filter实现。reduce可以将数组规约为一个值。

        拷贝数组有浅拷贝和深拷贝之分。多维数组和稀疏数组也需要特殊处理。

        这篇文章涵盖了数组的全方位用法分析,提供详细的代码示例,旨在成为JavaScript数组的完整指南。

        如果对数组的任何操作或用法不清楚,都欢迎在评论区提出,我会继续补充解释。希望这篇全面解析可以帮助大家全面掌握JavaScript数组的使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web后端开发

一、Maven 1.1 简介 1.2 作用 1.3 流程 通过各种插件实现项目的标准化构建。 1.4 安装 1.5 配置环境 1.5.1 当前工程环境 1.5.2 全局环境 1.6 创建 Maven项目 1.7 导入项目 1.8 依赖管理 1.8.1 依赖配置 1.8.2 依赖传递 pom.xml——右键——Diagrams——show dependen…

Maya参考图的导入和层的应用

参考视频&#xff1a;08.参考图的导入和层的应用_哔哩哔哩_bilibili 前视图/右视图模式下导入图形 创建图层 锁定后可以避免图片位置的移动 前视图和右视图要根据参照物对齐 与模型保持一定距离&#xff0c;同时把该参照图添加到图层中 模型可以添加到图层2中

window-nginx注册服务(nginx-1.24.0.zip)

window-nginx注册服务(nginx-1.24.0.zip) 1、下载当前windows版nginx的稳定版本。 https://nginx.org/en/download.html 2、解压到指定目录中&#xff0c;这里解压到D盘根目录&#xff0c;D:\nginx-1.24.0 3、管理员打开命令行&#xff0c;可先进行相关操作&#xff0c;看一下n…

NLP论文阅读记录 - 2023 | EXABSUM:一种新的文本摘要方法,用于生成提取和抽象摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 EXABSUM: a new text summarization approach for generating ex…

生产数据不备份,用时两行泪

背景&#xff1a;项目使用pg一主一从&#xff0c;因慢sql导致查询慢&#xff0c;所以想从原本的4核加到16核&#xff0c;联系好运维后&#xff0c;打算先从从库开始操作&#xff0c;机器上的pgsql都正常关闭&#xff0c;然后停止&#xff0c;关机&#xff0c;扩容一切都很顺利&…

gpu显卡简介

一、目录 1.基本常用参数 2. nvidia 显卡基本了解(基本简介) 3. 显卡查看算力 4. 显卡算力、驱动版本&#xff08;Driver Version&#xff09;、CUDA Toolkit&#xff08;CUDA Version&#xff09;、PyTorch版本之间的关系 5. 显卡安装流程 6. NVIDIA显卡简介 二、实现 基本常…

使用ElementUI的el-tab+vxe-table表格+复选框选择

效果&#xff1a; 功能&#xff1a;首先进来是全部清空的状态的 点击左边选择不同项右边会实时发送接口获取数据填充表格 复选的内容可以保留显示&#xff0c;比如A的1勾选后切换到B再切换回来A的1仍然是勾选状态 说实话官网的setCheckboxRow方法我实现不了&#xff0c;这里…

【MySQL】导入导出SQL脚本及远程备份---超详细介绍

目录 前言&#xff1a; 一 navcat导入导出 1.1 导入 1.2 导出 二 mysqldump 导入导出 2.1 导入 2.2 导出 三 load data infile命令导入导出 3.1 导入 3.2 导出 四 远程备份 五 思维导图 前言&#xff1a; 随着当今企业发展&#xff0c;数据库的数据越来越多&…

Qt OpenGL - 网格式的直角坐标系

Qt OpenGL - 网格式的直角坐标系 引言一、绘制3D网格1.1 绘制平行于y轴的线段1.2 绘制平行于三个轴的线段1.3 绘制不同的3D网格 二、网格式的直角坐标系三、参考链接 引言 在OpenGL进行3D可视化&#xff0c;只绘制三条坐标轴略显单薄&#xff0c;而绘制网格形式的坐标系则能更清…

Flutter之运行错误:this and base files have different roots

运行时报错&#xff1a; this and base files have different roots: E:\Demolpro\waqu\build\flutter-plugin-_android_lifecycle and C:\Users\78535\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_pulgin_android_lifecycle-2.0.17\android 如图&#xff1a; 这种情况…

自制数据库空洞率清理工具-C版-03-EasyClean-V1.2(支持南大通用数据库Gbase8a)

目录 一、环境信息 二、简述 三、升级点 四、支持功能 五、空洞率 六、工具流程图 1、流程描述 2、注意点 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法二 七、清理空洞率流程图 八、安装包下载地址 九、参数介绍 1、命令模板 2、命令样例 3…

Pytest测试 —— 如何使用属性来标记测试函数!

在软件开发领域&#xff0c;单元测试是确保代码质量和可维护性的关键一环。随着项目的不断发展&#xff0c;测试用例的管理变得愈发复杂&#xff0c;而一些测试可能需要特殊的处理、环境或者标记。在Python中&#xff0c;我们可以通过使用属性&#xff08;Attribute&#xff09…

Leetcode202快乐数(java实现)

今天分享的题目是快乐数&#xff1a; 快乐数的定义如下&#xff1a; 快乐数&#xff08;Happy Number&#xff09;是指一个正整数&#xff0c;将其替换为各个位上数字的平方和&#xff0c;重复这个过程直到最后得到的结果为1&#xff0c;或者无限循环但不包含1。如果最终结果为…

层次选择器

层次选择器 1.后代选择器二、子代选择器三、兄弟选择器四、相邻选择器 后代选择器&#xff0c;选择M元素内部后代的N元素&#xff08;所有N元素&#xff09; 选择器说明M N后代选择器&#xff0c;选择M元素内部后代的N元素&#xff08;所有N元素M>N子代选择器&#xff0c;选…

MATLAB 2023a软件下载安装教程

编程如画&#xff0c;我是panda&#xff01; 这次给大家带来的是MATLAB 2023a的下载安装教程 前言 MATLAB&#xff0c;即Matrix Laboratory的缩写&#xff0c;是一款强大的科学计算软件&#xff0c;以其独特的矩阵计算基础、丰富的数学函数库和直观的数据可视化工具而闻名。作…

神经辐射场(NeRF)概述

神经辐射场&#xff08;NeRF&#xff09;是一种用于三维场景重建的深度学习算法。它能够从一组稀疏的二维图片中重建出高质量的三维场景。 以下是对NeRF算法的原理和实现方法的详细解释&#xff1a; NeRF算法原理&#xff1a; 基本概念&#xff1a; NeRF算法基于光线追踪的原理…

BSC/平衡记分卡

一、Balanced Score Card BSC即平衡计分卡&#xff08;Balanced Score Card&#xff09;&#xff0c;是常见的绩效考核方式之一&#xff0c;是从财务、客户、内部运营、学习与成长四个角度&#xff0c;将组织的战略落实为可操作的衡量指标和目标值的一种新型绩效管理体系。 是…

数据结构第十三弹---链式二叉树基本操作(上)

链式二叉树 1、结构定义2、手动创建二叉树3、前序遍历4、中序遍历5、后序遍历6、层序遍历7、计算结点个数8、计算叶子结点个数9、计算第K层结点个数10、计算树的最大深度总结 1、结构定义 实现一个数据结构少不了数据的定义&#xff0c;所以第一步需要定义二叉树的机构。 typ…

龙芯3A5000上使用腾讯会议

原文链接&#xff1a;龙芯3A5000上使用腾讯会议 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在龙芯3A5000处理器上安装使用腾讯会议的经验分享。随着远程工作和在线会议的普及&#xff0c;腾讯会议成为了许多人日常工作不可或缺的工具。而对于使用龙芯3A5000…

HTTP 常见协议:选择正确的协议,提升用户体验(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…