Array数组方法

JavaScript 数组方法详解

JavaScript 数组提供了许多内置方法,用于处理数组的各种操作,如添加、删除、查找、排序、过滤等。以下是一些常用的数组方法及其作用和示例。

1. 添加和删除元素

  • push:在数组末尾添加一个或多个元素,并返回新的长度。

    let arr = [1, 2, 3];
    let newLength = arr.push(4, 5);
    console.log(arr); // 输出: [1, 2, 3, 4, 5]
    console.log(newLength); // 输出: 5
  • unshift:在数组开头添加一个或多个元素,并返回新的长度。

    let arr = [2, 3, 4];
    let newLength = arr.unshift(1, 0);
    console.log(arr); // 输出: [1, 0, 2, 3, 4]
    console.log(newLength); // 输出: 5
  • pop:删除数组的最后一个元素,并返回该元素。

    let arr = [1, 2, 3, 4];
    let lastElement = arr.pop();
    console.log(arr); // 输出: [1, 2, 3]
    console.log(lastElement); // 输出: 4
  • shift:在数组的开头删除一个元素,并返回该元素。

    let arr = [1, 2, 3, 4];
    let firstElement = arr.shift();
    console.log(arr); // 输出: [2, 3, 4]
    console.log(firstElement); // 输出: 1
  • splice:在任意位置添加或删除元素,返回被删除的元素组成的数组。

    let arr = [1, 2, 3, 4, 5];
    let removedElements = arr.splice(2, 1, 6, 7); // 从索引 2 开始删除 1 个元素,然后插入 6 和 7
    console.log(arr); // 输出: [1, 2, 6, 7, 4, 5]
    console.log(removedElements); // 输出: [3]

2. 查找元素

  • indexOf:返回第一个匹配元素的索引,如果没有找到则返回 -1。

    let arr = [1, 2, 3, 4, 5];
    let index = arr.indexOf(3);
    console.log(index); // 输出: 2
  • lastIndexOf:从数组末尾向前搜索,返回第一个匹配元素的索引,如果没有找到则返回 -1。

    let arr = [1, 2, 3, 2, 5];
    let lastIndex = arr.lastIndexOf(2);
    console.log(lastIndex); // 输出: 3
  • find:返回第一个满足条件的元素,否则返回 undefined

    let arr = [1, 2, 3, 4, 5];
    let found = arr.find(element => element > 3);
    console.log(found); // 输出: 4
  • findIndex:返回第一个满足条件的元素的索引,否则返回 -1。

    let arr = [1, 2, 3, 4, 5];
    let foundIndex = arr.findIndex(element => element > 3);
    console.log(foundIndex); // 输出: 3
  • findLast:从最后一个元素开始查找数组项。

    let arr = [1, 2, 3, 4, 5];
    let found = arr.findLast(element => element > 3);
    console.log(found); // 输出: 5

3. 遍历和映射

  • forEach:遍历数组,对每个元素执行一个函数,没有返回值。

    let arr = [1, 2, 3, 4, 5];
    arr.forEach((element, index, array) => {console.log(`Element: ${element}, Index: ${index}, Array: ${array}`);
    });
  • map:创建一个新数组,其结果是该函数处理原数组每个元素的结果。

    let arr = [1, 2, 3, 4, 5];
    let squared = arr.map(element => element * element);
    console.log(squared); // 输出: [1, 4, 9, 16, 25]
  • filter:创建一个新数组,包含通过测试的所有元素。

    let arr = [1, 2, 3, 4, 5];
    let even = arr.filter(element => element % 2 === 0);
    console.log(even); // 输出: [2, 4]
  • reduce:将数组元素迭代地减少为单个值。

    let arr = [1, 2, 3, 4, 5];
    let sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
    console.log(sum); // 输出: 15
  • reduceRight:从右到左迭代地应用一个函数并合并结果。

    let arr = [1, 2, 3, 4, 5];
    let sum = arr.reduceRight((accumulator, currentValue) => accumulator + currentValue, 0);
    console.log(sum); // 输出: 15
  • some:测试数组中是不是至少有一个元素通过了被提供的函数测试。它返回一个布尔值。

    let arr = [1, 2, 3, 4, 5];
    let hasEven = arr.some(element => element % 2 === 0);
    console.log(hasEven); // 输出: true
  • every:测试所有元素是否都通过了某个测试。它返回一个布尔值。

    let arr = [2, 4, 6, 8];
    let allEven = arr.every(element => element % 2 === 0);
    console.log(allEven); // 输出: true

4. 排序和反转

  • sort:对数组的元素进行排序。

    let arr = [3, 1, 4, 1, 5, 9];
    arr.sort((a, b) => a - b);
    console.log(arr); // 输出: [1, 1, 3, 4, 5, 9]
  • reverse:颠倒数组中元素的顺序。

    let arr = [1, 2, 3, 4, 5];
    arr.reverse();
    console.log(arr); // 输出: [5, 4, 3, 2, 1]
  • toSorted:ES2023 支持 sort() 的不可变版本。

    let arr = [3, 1, 4, 1, 5, 9];
    let sorted = arr.toSorted((a, b) => a - b);
    console.log(sorted); // 输出: [1, 1, 3, 4, 5, 9]
    console.log(arr); // 输出: [3, 1, 4, 1, 5, 9] (原数组不变)
  • toReversed:ES2023 支持 reverse() 的不可变版本。

    let arr = [1, 2, 3, 4, 5];
    let reversed = arr.toReversed();
    console.log(reversed); // 输出: [5, 4, 3, 2, 1]
    console.log(arr); // 输出: [1, 2, 3, 4, 5] (原数组不变)

5. 分割和合并

  • concat:用于连接两个或多个数组并返回一个新的数组,不改变原数组。

    let arr1 = [1, 2, 3];
    let arr2 = [4, 5, 6];
    let combined = arr1.concat(arr2);
    console.log(combined); // 输出: [1, 2, 3, 4, 5, 6]
    console.log(arr1); // 输出: [1, 2, 3] (原数组不变)
  • join:将数组的所有元素连接成一个字符串,可以指定分隔符。

    let arr = [1, 2, 3, 4, 5];
    let str = arr.join(', ');
    console.log(str); // 输出: "1, 2, 3, 4, 5"
  • slice:返回数组的一个片段,不改变原数组。

    let arr = [1, 2, 3, 4, 5];
    let subArr = arr.slice(1, 3);
    console.log(subArr); // 输出: [2, 3]
    console.log(arr); // 输出: [1, 2, 3, 4, 5] (原数组不变)
  • toSpliced:ES2023 支持 splice() 的不可变版本。

    let arr = [1, 2, 3, 4, 5];
    let spliced = arr.toSpliced(2, 1, 6, 7);
    console.log(spliced); // 输出: [1, 2, 6, 7, 4, 5]
    console.log(arr); // 输出: [1, 2, 3, 4, 5] (原数组不变)

6. 其他方法

  • fill:用静态值填充一个数组的元素。

    let arr = [1, 2, 3, 4, 5];
    arr.fill(0, 2, 4); // 从索引 2 到 4(不包括 4)填充 0
    console.log(arr); // 输出: [1, 2, 0, 0, 5]
  • flat:将多维数组“拉平”为一维数组。

    let arr = [1, [2, [3, 4]], 5];
    let flattened = arr.flat(2); // 深度为 2
    console.log(flattened); // 输出: [1, 2, 3, 4, 5]
  • flatMap:先映射后拉平,即映射每个元素到新数组,然后将所有这些新数组拉平成一个新数组。

    let arr = [1, 2, 3];
    let mappedAndFlattened = arr.flatMap(x => [x, x * 2]);
    console.log(mappedAndFlattened); // 输出: [1, 2, 2, 4, 3, 6]
  • copyWithin:将数组的一部分复制到同一数组中的另一个位置并返回它,不增加其长度。

    let arr = [1, 2, 3, 4, 5];
    arr.copyWithin(0, 3, 5); // 将索引 3 到 5 的元素复制到索引 0 开始的位置
    console.log(arr); // 输出: [4, 5, 3, 4, 5]
  • atwith:用于单元素数组修改和访问的函数式和不可变版本,允许使用负索引获取和更改元素值。

    let arr = [1, 2, 3, 4, 5];
    console.log(arr.at(-1)); // 输出: 5
    arr = arr.with(0, 0); // 使用 with 修改数组
    console.log(arr); // 输出: [0, 2, 3, 4, 5]

总结

这些数组方法提供了丰富的功能,可以帮助开发者高效地处理数组数据。每种方法都有其特定的用途,了解和熟练使用这些方法可以使代码更加简洁和高效。希望这些分类和示例能帮助您更好地掌握和使用 JavaScript 数组方法。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Probing the 3D Awareness of Visual Foundation Models》论文解析——多视图一致性

一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…

【C++】深入理解自定义 list 容器中的 list_iterator:迭代器实现详解

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 📌 引言📌 1. 为什么 list 容器需要 list_iterator…

昆明华厦眼科医院举办中外专家眼科技术研讨会

9月13日,“睿智迭代,增效赋能”Menicon Z Night中外专家研讨会在昆明华厦眼科医院成功举办。此次会议由目立康公司与昆明华厦眼科医院携手共筑,标志着双方合作迈向新的高度。 昆明华厦眼科医院总经理王若镜首先发表了热情洋溢的致辞&#xff…

FreeRTOS的列表与列表项

目录 1.为什么要学列表? 2.什么是列表和列表项? 2.1 列表 2.2列表项 2.3,迷你列表项 3.列表与列表项的初始化 3.1 列表初始化 3.2列表项初始化 4.列表项的“增删查”(插入、删除、遍历) 4.1列表项的插入 4.1.1…

前端(3)——快速入门JaveScript

参考: 罗大富 JavaScript 教程 | 菜鸟教程 JavaScript 教程 1. JaveScript JavaScript 简称 JS JavaScript 是一种轻量级、解释型、面向对象的脚本语言。它主要被设计用于在网页上实现动态效果,增加用户与网页的交互性。作为一种客户端脚本语言&#…

使用阿里云快速搭建 DataLight 平台

使用阿里云快速搭建 DataLight 平台 本篇文章由用户 “闫哥大数据” 分享,B 站账号:https://space.bilibili.com/357944741?spm_id_from333.999.0.0 注意:因每个人操作顺序可能略有区别,整个部署流程如果出现出入,以…

H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因

EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方…

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏,之前以为和#define、DEFINES 差不多,看了定义才发现不是那么回事,定义如下: 看注释就知道了QT_CONFIG宏,其实是:实现了一个在编译时期安全检查,检查指定的Qt特性…

centos7安装Chrome使用selenium-wire

背景:在centos7中运行selenium-wire爬虫,系统自带的Firefox浏览器不兼容,运行报错no attribute ‘set_preference’,应该是selenium-wire和Firefox的驱动不兼容 查了半天不知道怎么解决,就想在centos7上安装Chrome来跑…

医院信息化与智能化系统(21)

医院信息化与智能化系统(21) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…

《FreeRTOS任务控制块篇》

Task control block, 即任务控制块。任务控制块(TCB)是一个结构体,它会分配给每个任务,其中存储着任务的状态信息,包括指向任务上下文(任务的运行时环境,包括寄存器值)的指针。任务控…

Queuing 表(buffer表)的优化实践 | OceanBase 性能优化实践

案例问题描述 该案例来自一个金融行业客户的问题:他们发现某个应用对一个数据量相对较小的表(仅包含数千条记录)访问时,频繁遇到性能下降的情况。为解决此问题,客户向我们求助进行分析。我们发现这张表有频繁的批量插…

ssh登陆服务器后支持Tab键命令补全

在服务器上新建了用户后,通过ssh登录到服务器后发现不能使用Tab键来进行命令补全 截图如下: 以为没有配置.bashrc 此时输入 source 发现无此命令 细心的可以发现 -sh 于是输入命令echo $SHELL 确认此时的shell为sh, 只要输入命令bash即可切…

[白月黑羽]关于仿写类postman功能软件题目的解答

原题: 答: python文件如下 from PySide6.QtWidgets import QApplication, QMessageBox,QTableWidgetItem,QHeaderView,QWidget,QTableWidget from PySide6.QtCore import QEvent,QObject from PySide6.QtUiTools import QUiLoader import time import …

Postman接口测试(断言、关联、参数化、输出测试报告)

基本界面展示 Get、Post请求 Postman断言 使用postman来判断预期结果与实际结果是否一致 响应状态码断言 响应包含字符串 断言判断字符串的格式 关联 用于解决http请求之间存在依赖关系 依赖:一个http请求的响应结果中的数据,被另一个请求使用 登…

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter) 更新以gitee为准: gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

网络原理-网络层和数据链路层

一、网络层 1、IP协议完成的工作 地址管理:使用一套地址体系来描述所没备的位置 路由选择:一个数据包如何从网络的某个地址传到另一个地址 2、IP报头 4 位版本号:取值为4或6 (IPv4/IPv6) 4 位首部长度:IP报头,单位…

【Three.js基础学习】22.New project structure

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 这里将使用全新的项目结构,将不同工具分层,区分开使用。 一、结构目录 二、对应文件 1.script.js 获取画布,引入样式和功能。 /* 课…

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前,5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力,进入5G发展的下半场,5G与AI的融合正推动诸多行业的数字化转型和创新发展,终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…

【WPF】Prism学习(二)

Prism Commands 1.命令(Commanding) 1.1. ViewModel的作用: ViewModel不仅提供在视图中显示或编辑的数据,还可能定义一个或多个用户可以执行的动作或操作。这些用户可以通过用户界面(UI)执行的动作或操作…