Array数组方法

news2024/11/16 9:12:12

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.coloradmin.cn/o/2241402.html

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

相关文章

面试时问到软件开发原则,我emo了

今天去一个小公司面试,面试官是公司的软件总监,眼镜老花到看笔记本电脑困难,用win7的IE打开leetcode网页半天打不开,公司的wifi连接不上,用自己手机热点,却在笔记本电脑上找不到。还是我用自己的手机做热点…

Wi-Fi背后的工作原理与技术发展历程介绍【无线通信小百科】

1个视频说清楚WIFI:频段/历程/技术参数/常用模块 智能手机拥有率越来越高的今天,大家已经习惯了通过无线网络上网的方式。除了在外面需要用手机流量,我们通常在家里或者机场,商场都可以通过Wi-Fi连接上网。本期文章将为大家介绍Wi…

【MySQL 保姆级教学】详细讲解视图--(15)

视图 1. 为什么要有视图?2.视图的定义和特点3. 创建视图4. 视图的使用举例4.1 创建表并插入数据4.2 举例 5. 视图和基表之间有什么联系呢? 1. 为什么要有视图? 当我们频繁地使用用多表查询和复合查询出的结果时,就需要频繁的使用…

Python中的HTTP协议

文章目录 一. 网址URL二. HTTP协议1. HTTP协议的概念2. HTTP协议的作用3. HTTP请求报文与响应报文① HTTP请求报文Ⅰ. GET请求报文格式Ⅱ. GET请求报文分析Ⅲ. POST请求报文格式Ⅳ. POST请求报文分析Ⅴ. GET与POST请求报文总结 ② HTTP响应报文Ⅰ. HTTP响应报文格式Ⅱ. HTTP响应…

108. UE5 GAS RPG 实现地图名称更新和加载关卡

在这一篇里,我们将实现对存档的删除功能,在删除时会有弹框确认。接着实现获取玩家的等级和地图名称和存档位置,我们可以通过存档进入游戏,玩家在游戏中可以在存档点存储存档。 实现删除存档 删除存档需要一个弹框确认&#xff0…

DNS批量解析管理软件有什么用

在复杂的网络环境中,DNS批量解析管理软件犹如一把功能强大的钥匙,开启了高效网络管理的大门,为网络运营和维护带来了诸多便利。 1、对于网络服务提供商而言,DNS批量解析管理软件极大地提高了工作效率 传统的DNS解析管理方式在处…

IoT [remote electricity meter]

IoT [remote electricity meter] 物联网,远程抄表,电表数据,举个例子

sql数据库-排序查询-DQL

目录 语法 排序方式 举例 将表按年龄从小到大排序 将表按年龄从大到小排序 ​编辑 多重排序 将表按年龄升序,年龄相同按入职时间降序 语法 select * from 表名 order by 字段名1 排序方式1,字段2 排序方式2; 排序方式 升序:ASC&…

在spring boot工程中使用Filter时,@WebFilter 注解不生效的问题分析和解决方案

1. 问题描述 首先编写一个Filter类并通过Component放入spring容器中,通过实现jakarta.servlet中提供的Filter接口完成过滤器的创建,代码如下。 import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import org.springframework.st…

学习threejs,使用TWEEN插件实现动画

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.PLYLoader PLY模型加…

TypeScript在现代前端开发中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 TypeScript在现代前端开发中的应用 TypeScript在现代前端开发中的应用 TypeScript在现代前端开发中的应用 引言 TypeScript 概述…

CTF-Crypto-简单加密

打开首页看题目 描述看起来是一段乱码,拉入随波逐流,未解决 e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA 观察字符串,末尾是AA,其中可能含有base64加密 找寻Ascll码表,发现A的Ascll是65,的Ascl…

MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能

MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能 在Mac上的Safari浏览器中,可以通过实况文本功能来实现图片中的文本翻译。关闭步骤具体步骤如下: 在浏览器地址栏,鼠标右击翻译按钮,然后点击“首选…

操作系统——虚拟存储器(含思维导图)

本教材为中国铁道出版社——操作系统(第四版)刘振鹏、张明、王煜著。本篇文章为第六章复习。 目录 思维导图: ​编辑一、虚拟存储器 1.理论基础 2.定义 二、分页虚拟存储管理 1.基本原理 2.缺页中断 3.页面置换 (1&…

基于8.0 Update 3b 的ESXi-Arm Fling

很久没有更新过 ESXi-Arm 的版本了,博通旗下的 VMware 居然把它更新到了 8.0U3b。 下载地址:https://community.broadcom.com/flings 我准备使用离线更新,就没有下载 ISO,直接下载ESXi-Arm-Offline-Depot-2_00-dl.zip scp 上传…

python解析网页上的json数据落地到EXCEL

安装必要的库 import requests import pandas as pd import os import sys import io import urllib3 import json测试数据 网页上的数据结构如下 {"success": true,"code": "CIFM_0000","encode": null,"message": &quo…

C#桌面应用制作计算器

C#桌面应用制作简易计算器,可实现数字之间的加减乘除、AC按键清屏、Del按键清除末尾数字、/-按键取数字相反数、%按键使数字缩小100倍、按键显示运算结果等...... 页面实现效果 功能实现 布局 计算器主体使用Panel容器,然后将button控件排列放置Pane…

谷歌推出设备内置人工智能,实时向手机用户发出诈骗电话警报

Google 宣布推出适用于 Android 的新安全功能,可实时防御诈骗和有害应用。 这些功能由先进的设备内置 AI 提供支持,可在不损害隐私的情况下增强用户安全性。 这些新的安全功能首先在 Pixel 上推出,并将很快在更多 Android 设备上推出。 诈…

HarmonyOS ArkTs 解决流式传输编码问题

工作日志 日期:2024-11-15 标题:HarmonyOS ArkTs 解决流式传输编码问题 问题描述 问题:在处理流式数据的 HTTP 请求时,服务器返回的数据存在编码问题,导致数据无法正确地解码为字符串。部分数据在解码后出现了乱码…

MySQL数据库最大连接数查询及修改

MySQL数据库最大连接数查询及修改 1. 客户端连接数超出异常案例 Navicat连接异常信息如下: 2. 查看MySQL最大客户端连接数 通过mysql client命令登录MySQL数据库(登录用户不受限制,既可以是 root管理员用户,也可以是常规用户&a…