JS常用数组方法总结

JavaScript 数组(Array)提供了许多内置方法来处理数组元素,这些方法大致可以分为几类:添加/删除元素、遍历数组、搜索元素、转换数组、排序和归约(reduce)等。下面我将详细介绍一些常用的数组方法,并给出示例代码。

1. 添加/删除元素

push()

向数组的末尾添加一个或多个元素,并返回新的长度

let arr = [1, 2, 3];  
arr.push(4, 5);  
console.log(arr); // [1, 2, 3, 4, 5]
pop()

删除并返回数组的最后一个元素,如果数组为空则返回undefined

let arr = [1, 2, 3];  
let lastElement = arr.pop();  
console.log(arr); // [1, 2]  
console.log(lastElement); // 3
unshift()

向数组的开头添加一个或多个元素,并返回新的长度。

let arr = [1, 2, 3];  
arr.unshift(0);  
console.log(arr); // [0, 1, 2, 3]
shift()

删除并返回数组的第一个元素,如果数组为空则返回undefined

let arr = [1, 2, 3];  
let firstElement = arr.shift();  
console.log(arr); // [2, 3]  
console.log(firstElement); // 1
splice()

通过删除现有元素和/或添加新元素来更改一个数组的内容。

let arr = [1, 2, 3, 4, 5];  
arr.splice(2, 2, 'a', 'b'); // 从索引2开始,删除2个元素,然后添加'a'和'b'  
console.log(arr); // [1, 2, 'a', 'b', 5]

2. 遍历数组

forEach()

对数组的每个元素执行一次提供的函数。

let arr = [1, 2, 3];  
arr.forEach(function(element) {  console.log(element);  
});  
// 输出:  
// 1  
// 2  
// 3
map()

创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。

let arr = [1, 2, 3];  
let doubled = arr.map(function(element) {  return element * 2;  
});  
console.log(doubled); // [2, 4, 6]
entries()、keys()、values()
  • entries():返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。
  • keys():返回一个新的Array Iterator对象,该对象包含数组中每个索引的键。
  • values():返回一个新的Array Iterator对象,该对象包含数组中每个索引的值。

    这三个方法都可以与for...of循环一起使用,来遍历数组。

let arr = ['a', 'b', 'c'];  for (let [index, value] of arr.entries()) {  console.log(index, value);  
}  for (let index of arr.keys()) {  console.log(index);  
}  for (let value of arr.values()) {  console.log(value);  
}
 flat()

flat()方法用于将多维数组转换成一维数组,并返回一个新数组。该方法可以接受一个可选的参数,表示展开的深度。

let arr = [1, [2, [3, [4, 5]]], 6];  
console.log(arr.flat(Infinity)); // [1, 2, 3, 4, 5, 6]  // 展开一层  
console.log(arr.flat(1)); // [1, 2, [3, [4, 5]], 6]
flatMap()

flatMap()方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与map()flat(1)的组合相似,但flatMap()更简洁。

let arr = [1, 2, 3, 4];  
const doubledAndFlattened = arr.flatMap(x => [x, x * 2]);  
console.log(doubledAndFlattened); // [1, 2, 2, 4, 3, 6, 4, 8]

3. 搜索元素

indexOf()

返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

let arr = [2, 5, 9];  
console.log(arr.indexOf(2)); // 0  
console.log(arr.indexOf(7)); // -1
find()

返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined

let arr = [5, 12, 8, 130, 44];  
let found = arr.find(function(element) {  return element > 10;  
});  
console.log(found); // 12
 some() 方法

 some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个布尔值。

let array = [1, 2, 3, 4, 5];  // 测试数组中是否至少有一个元素大于3  
let hasLargeNumbers = array.some(function(element) {  return element > 3;  
});  console.log(hasLargeNumbers); // true  // 测试数组中是否所有元素都大于3(应该返回false)  
let allLargeNumbers = array.some(function(element) {  return element > 3; // 注意:some会在找到第一个符合条件的元素时停止搜索  
});  // 但为了检查所有元素是否都大于3,应使用every()  
let allReallyLargeNumbers = array.every(function(element) {  return element > 3;  
});  console.log(allLargeNumbers); // true,因为存在大于3的元素  
console.log(allReallyLargeNumbers); // false,因为不是所有元素都大于3
  includes()

 includes()方法用于判断数组中是否包含某个元素,返回布尔值。

let arr = [1, 2, 3, 4, 5];  
console.log(arr.includes(3)); // true  
console.log(arr.includes(6)); // false
findIndex()

虽然已经在之前提及,但值得再次强调其重要性。findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

let arr = [5, 12, 8, 130, 44];  
let index = arr.findIndex(function(element) {  return element > 10;  
});  
console.log(index); // 1

4. 排序

sort()

对数组的元素进行排序,并返回数组。

let arr = [10, 1, 4, 7, 9];  
arr.sort(function(a, b) {  return a - b;  
});  
console.log(arr); // [1, 4, 7, 9, 10]

5. 归约(Reduce)

reduce()

对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

let arr = [1, 2, 3, 4];  
let sum = arr.reduce(function(accumulator, currentValue) {  return accumulator + currentValue;  
}, 0);  
console.log(sum); // 10

6. 数组的合并

在JavaScript中,有多种方式可以合并数组。这里列出两种常见的方法:

使用concat()

concat() 方法用于合并两个或多个数组。此方法不会改变现有的数组,而是返回一个新数组。

let arr1 = [1, 2, 3];  
let arr2 = [4, 5, 6];  
let arr3 = arr1.concat(arr2);  
console.log(arr3); // [1, 2, 3, 4, 5, 6]
使用扩展运算符(...)

ES6引入了扩展运算符,它允许一个数组表达式或字符串在需要多个参数(用于函数调用)或多个元素(用于数组字面量)的地方展开。

let arr1 = [1, 2, 3];  
let arr2 = [4, 5, 6];  
let arr4 = [...arr1, ...arr2];  
console.log(arr4); // [1, 2, 3, 4, 5, 6]

7. 数组填充

fill()

fill()方法用于将一个固定值填充到一个数组中,从起始索引到终止索引(但不包括终止索引),默认从数组的第一个元素开始到最后一个元素结束。

let arr = [1, 2, 3, 4, 5];  
arr.fill(0);  
console.log(arr); // [0, 0, 0, 0, 0]  // 从索引1开始到索引3(不包括3)填充'a'  
arr.fill('a', 1, 3);  
console.log(arr); // [0, 'a', 'a', 4, 5]

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

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

相关文章

双非本 985 硕士,秋招上岸字节算法岗!

最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新人如何快速入门算法岗、如何准备面试攻略、面试常考点、大模型项目落地经验分享等热门话题进行了深入的讨论。…

Chainlit集成LlamaIndex实现知识库高级检索(自动合并检索)

检索原理 自动合并检索 自动合并检索原理,和我的上一篇文章的检索方案: 将文本分割成512大小(一般对应段落大小)和128(一般对句子大小不是严格的句子长度)大小两种分别存储到索引库,再用llama_…

架构设计笔记-5-软件工程基础知识

知识要点 按软件过程活动,将软件工具分为软件开发工具、软件维护工具、软件管理和软件支持工具。 软件开发工具:需求分析工具、设计工具、编码与排错工具。 软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工…

快速解决Isaac Sim资源获取不到问题

国内使用Isaac Sim的时候,最常见的问题是加载不了USD或材质资源,这会导致整个Isaac Sim软件卡住或崩溃,以及无法继续开展项目。比如加载realsense或,最新的Isaac Sim 4.2.0 加载一个激光雷达,都要获取相关传感器usd&am…

桶排序和计数排序(非比较排序算法)

桶排序 桶排序是一种基于分配的排序算法,特别适合用来排序均匀分布的数据。它的基本思想是将输入的数据分到有限数量的桶里,然后对每个桶内的数据分别进行排序,最后再将各个桶内的数据合并得到最终的排序结果。(通常用于浮点数,因…

RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案

RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案 🛠️ RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案摘要 📃引言 ✨1. 什么是递归?🔍1.1 递归的基本概念 &#x…

JavaScript可视化示例

JavaScript 可视化是指使用 JavaScript 编程语言来创建和操作图形、图表、动画等视觉元素的过程。以下是一些常见的 JavaScript 可视化库和工具,以及它们的主要特点: 1. D3.js 特点: D3.js(Data-Driven Documents)是一个非常强大…

思维商业篇(4)—产业上下游定

思维商业篇(4)—产业上下游定位(微笑曲线) 产业上下游定位,帮助我们去观察一个企业在产业上下游中处于一个什么样的生态位。 上游 处于产业链开始端,百川东到海,百川的的起始端就是上游,东到海的海就是下游。 处在上游的企业一…

嵌入式系统基础讲解

​ 大家好,我是程序员小羊! 前言: 嵌入式系统是计算机科学与电子工程的交叉领域,广泛应用于消费电子、工业控制、汽车、医疗设备等多个行业。嵌入式系统设计涉及硬件和软件的协同开发,要求开发者掌握多方面的基础知识。…

Python学习——【4.4】数据容器(序列)的切片

文章目录 【4.4】数据容器(序列)的切片一、了解什么是序列二、掌握序列的切片操作 【4.4】数据容器(序列)的切片 一、了解什么是序列 序列是指:内容连续、有序,可使用下标索引的一类数据容器。 列表、元组…

基于单片机的粮仓环境检测系统设计

本设计主要由处理模块、温湿度检测模块、数据显示模块、声光报警模块和按钮的输入模块组成。采用了AT89C52作为主要的控制单元,利用DHT11温湿度传感器,对粮食仓库中的温度和湿度等展开检测,并在LCD1602液晶显示器中进行实时显示。同时&#x…

双向链表:实现、操作与分析【算法 17】

双向链表:实现、操作与分析 引言 双向链表(Doubly Linked List)是链表数据结构的一种重要形式,它允许节点从两个方向进行遍历。与单向链表相比,双向链表中的每个节点不仅包含指向下一个节点的指针(或引用&…

iOS常见锁及应用(笔记版)

什么是锁? 在程序中,当多个任务(或线程)同时访问同一个资源时,比如多个操作同时修改一份数据,可能会导致数据不一致。这时候,我们需要“锁”来确保同一时间只有一个任务能够操作这个数据&#…

django项目——图片上传到阿里云OSS对象存储

文章目录 实现图片上传到阿里云OSS对象存储1. 创建阿里云OSS对象存储2. 查询获取接口访问key和秘钥3. 安装阿里云的SDK集成到项目中使用3.1 python直接操作oss23.2 django配置自定义文件存储上传文件到oss 实现图片上传到阿里云OSS对象存储 1. 创建阿里云OSS对象存储 开发文档…

顶点缓存对象(VBO)与顶点数组对象(VAO)

我们的顶点数组在CPU端的内存里是以数组的形式存在,想要GPU去绘制三角形,那么需要将这些数据传输给GPU。那这些数据在显存端是怎么存储的呢?VBO上场了,它代表GPU上的一段存储空间对象,表现为一个unsigned int类型的变量,GPU端内存对象的一个ID编号、地址、大小。一个VBO对…

Python爬虫之urllib模块详解

Python爬虫入门 此专栏为Python爬虫入门到进阶学习。 话不多说,直接开始吧。 urllib模块 Python中自带的一个基于爬虫的模块,其实这个模块都几乎没什么人用了,我就随便写写了。 - 作用:可以使用代码模拟浏览器发起请求。&…

基于python的文本聚类分析与可视化实现,使用kmeans聚类,手肘法分析

1、数据预处理 由于在数据分析之前数据集通常都存在数据重复、脏数据等问题,所以为了提高 数据分析结果的质量,在应用之前就必须对数据集进行数据预处理。数据预处理的方法通常有清洗、集成、转换、规约这四个方面,接下来详细介绍这对爬取…

leetcode第七题:字符反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入…

分布式安装LNMP

目录 搭建LNMP架构 安装mysql 1.上传mysql软件包,关闭防火墙和核心防护 2.安装环境依赖包,桌面安装可能有自带的数据库除 3.配置软件模块 4.编译及安装 5.创建mysql用户 6.修改mysql 配置文件 7.更改mysql安装目录和配置文件的属主属组 8.设置…

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…