JS 数组创建、访问、常用方法

news2024/12/27 10:17:47

文章目录

  • 创建
  • 访问
  • 常用属性和相关方法
    • 1. length 长度属性
    • 2. push() 新增元素 - 末尾添加
    • 3. unshift() 新增元素 - 开头添加
    • 4. pop() 移除元素 - 末尾删除
    • 5. shift() 移除元素 - 开头删除
    • 6. concat() 复制数组后新增
    • 7. slice() 复制数组
    • 8. splice() 增删改
    • 9. toString() 转字符串
    • 10. join() 转字符串并以指定符号连接
    • 11. isArray() 判断是否为数组
    • 12. forEach() 遍历数组
    • 13. map() 遍历并返回新数组
    • 14. filter() 遍历并过滤后返回新数组
    • 15. some() 任意命中
    • 16. every() 全部命中
    • 17. find() 查找
    • 18. reduce() 归并方法

创建

<script>
    // 方式 1
    let a = []
    a[0] = '1'
    a[1] = '2'
    a[2] = '3'
    console.log(a)

    // 方式 2
    let b = new Array()
    b[0] = '1'
    b[1] = '2'
    b[2] = '3'
    console.log(b)

    // 方式 3
    let c = ['1', '2', '3']
    console.log(c)

    // 方式 4
    let d = new Array('1', '2', '3')
    console.log(d)

    // 方式 5 构造参数为一个数字时, 代表申请数组长度
    let e = new Array(3)
    console.log(e)
</script>

访问

<script>
    let d = ['1', '2', '3']
    console.log(d[0])
    console.log(d[1])
    console.log(d[2])
</script>

常用属性和相关方法

1. length 长度属性


返回数组长度

<script>
    let arr = [1, 2, 3, 4, 5];
    console.log(arr.length) // 结果: 5
</script>

2. push() 新增元素 - 末尾添加


将一个或多个元素添加到数组的末尾, 并返回添加后的长度

<script>
    let arr = [1, 2, 3, 4, 5];
    console.log(arr.push(6, 7)) // 结果: 7
    console.log(arr) // 结果: [1, 2, 3, 4, 5, 6, 7]
</script>

3. unshift() 新增元素 - 开头添加


将一个或多个元素添加到数组的开头, 原元素自动后移, 并返回添加后的长度

<script>
    let arr = [1, 2, 3, 4, 5];
    console.log(arr.unshift(6, 7)) // 结果: 7
    console.log(arr) // 结果: [6, 7, 1, 2, 3, 4, 5]
</script>

4. pop() 移除元素 - 末尾删除


删除数组中最后一个元素, 并返回被删除的元素值

<script>
    let arr = ['a', 'b', 'c', 'd', 'e'];
    console.log(arr.pop()) // 结果: e
    console.log(arr) // 结果: ['a', 'b', 'c', 'd']
</script>

5. shift() 移除元素 - 开头删除


删除数组中第一个元素, 并返回被删除的元素值

<script>
    let arr = ['a', 'b', 'c', 'd', 'e'];
    console.log(arr.shift()) // 结果: a
    console.log(arr) // 结果: ['b', 'c', 'd', 'e']
</script>

6. concat() 复制数组后新增


复制原来数组, 并在新数组中添加元素,不会影响原数组

<script>
    let arr = ['a', 'b', 'c', 'd', 'e'];
    let arr2 = arr.concat('f', 'g')
    console.log(arr) // 结果: ['a', 'b', 'c', 'd', 'e']
    console.log(arr2) // 结果: ['a', 'b', 'c', 'd', 'e', 'f', 'g']
</script>

7. slice() 复制数组


根据起始位置和结束位置复制一份数组, 不会影响原数组

<script>
    let arr = ['a', 'b', 'c', 'd', 'e'];
    let arr2 = arr.slice(1)
    let arr3 = arr.slice(1, 4)
    console.log(arr) // 结果: ['a', 'b', 'c', 'd', 'e']
    console.log(arr2) // 结果: ['b', 'c', 'd', 'e']
    console.log(arr3) // 结果: ['b', 'c', 'd']

    // 经典案例: 伪数组转真数组
    function func() {
        console.log(Array.isArray(arguments)) // false
        console.log(Array.isArray([].slice.call(arguments))) // true
    }
    func()
</script>

8. splice() 增删改


splice( 索引, 要删除的个数, 新元素1, 新元素2…)

很强大的方法, 可以对数组进行增删改, splice() 方法的返回值是被删除的数组元素。

<script>
    // 增
    let arr = ['a', 'b', 'c', 'd', 'e'];
    // 从索引 0 开始, 不删除, 插入 f 和 g
    console.log(arr.splice(1, 0, 'f', 'g')) // 结果:被删除元素为 []
    console.log(arr) // 结果:["a", "f", "g", "b", "c", "d", "e"]

    // 删
    let arr2 = ['a', 'b', 'c', 'd', 'e'];
    // 从索引 1 开始, 删除两个
    console.log(arr2.splice(1, 2)) // 结果:被删除元素为 ["b", "c"]
    console.log(arr2) // 结果:["a", "d", "e"]

    // 改
    let arr3 = ['a', 'b', 'c', 'd', 'e'];
    // 从索引 1 开始, 删除两个, 然后插入 f 和 g
    console.log(arr3.splice(1, 2, 'f', 'g')) // 结果:被删除元素为 ["b", "c"]
    console.log(arr3) // 结果: ["a", "f", "g", "d", "e"]
</script>

9. toString() 转字符串


调用数组内各个元素的 toString() 方法, 并把每个元素的 toString() 结果用逗号相连

<script>
    let arr = ['a', 'b', 'c', 'd', 'e'];
    console.log(arr.toString()) // 结果:a,b,c,d,e

    // 重写对象的 toString()
    let arr2 = [
        {
            name: 'a',
            toString: function () {
                return this.name;
            }
        },
        {
            name: 'b',
            toString: function () {
                return this.name;
            }
        },
        {
            name: 'c',
            toString: function () {
                return this.name;
            }
        }]
    console.log(arr2.toString()) // 结果:a,b,c
</script>

10. join() 转字符串并以指定符号连接


调用数组内各个元素的 toString() 方法, 并把每个元素的 toString() 结果用连接符相连

<script>
    let arr = ['a', 'b', 'c', 'd', 'e'];
    console.log(arr.join('-')) // 结果:a-b-c-d-e

    // 重写对象的 toString()
    let arr2 = [
        {
            name: 'a',
            toString: function () {
                return this.name;
            }
        },
        {
            name: 'b',
            toString: function () {
                return this.name;
            }
        },
        {
            name: 'c',
            toString: function () {
                return this.name;
            }
        }]
    console.log(arr2.join('-')) // 结果:a-b-c
</script>

11. isArray() 判断是否为数组


判断变量是否是数组类型, true: 数组 false: 非数组

<script>
    let num = 1;
    console.log(Array.isArray(num)) // 结果:false

    let arr = ['a', 'b', 'c', 'd', 'e'];
    console.log(Array.isArray(arr)) // 结果:true
</script>

12. forEach() 遍历数组


遍历数组, 回调函数的参数都是可选的, 但是必须保证参数列表顺序

<script>
    // 语法:
    // forEach(function (当前元素, 当前下标, 数组本身) {
    // })

    let arr = ['a', 'b', 'c', 'd', 'e'];
    arr.forEach(function (item, index, array) {
        console.log('第' + index + '个索引位置的数据是' + item)
        if (index === arr.length - 1) {
            console.log('数组对象:' + array)
        }
    })
</script>

13. map() 遍历并返回新数组


遍历数组, 每一次遍历都必须有一个返回值(默认返回 undefined), 最后根据每一次的返回值返回一个新的数组

回调函数的参数都是可选的, 但是必须保证参数列表顺序

<script>
    // 语法:
    // map(function (当前元素, 当前下标, 数组本身) {
    // return item
    // })

    let arr = ['a', 'b', 'c', 'd', 'e'];
    let arr2 = arr.map(function (item, index, array) {
        return item += '1'
    })
    console.log(arr2) // 结果:["a1", "b1", "c1", "d1", "e1"]
</script>

14. filter() 遍历并过滤后返回新数组


遍历数组, 每一次遍历都必须返回一个布尔值(默认返回 false), 最后把所有返回 true 的元素, 筛选成一个新的数组

<script>
    // 语法:
    // filter(function (当前元素, 当前下标, 数组本身) {
    // return true;
    // })
    let arr = ['a', 'b', 'c', 'd', 'e'];
    let arr2 = arr.filter(function (item, index, array) {
        return item === 'a' || item === 'e'
    })
    console.log(arr2) // 结果:["a", "e"]
</script>

15. some() 任意命中


遍历数组, 每一次遍历都必须返回一个布尔值(默认返回 false), 只要有一次返回了 true, 那么 some() 的返回值就为 true

<script>
    // 语法:
    // some(function (当前元素, 当前下标, 数组本身) {
    // return true;
    // })

    let arr = ['a', 'b', 'c', 'd', 'e'];
    console.log(arr.some(function (item, index, array) {
        return item === 'a'
    })) // 结果: true

    console.log(arr.some(function (item, index, array) {
        return item === 'z'
    })) // 结果: false
</script>

16. every() 全部命中


遍历数组, 每一次遍历都必须返回一个布尔值(默认返回 false), 当所有的返回都为 true, 那么 every() 的返回值就为 true

<script>
    // 语法:
    // every(function (当前元素, 当前下标, 数组本身) {
    // return true;
    // })
    let arr = ['a', 'b', 'c', 'd', 'e'];
    console.log(arr.every(function (item, index, array) {
        return item.length > 0
    })) // 结果: true

    console.log(arr.every(function (item, index, array) {
        return !item === 'e'
    })) // 结果: false
</script>

17. find() 查找


遍历数组, 每一次遍历都必须返回一个布尔值(默认返回 false), 当碰见返回 true 的元素时, 停止遍历, 并返回该元素。

和 filter() 不同的是, filter() 会遍历完整个数组, 而 find() 只要碰见一次 true,就会直接停止遍历。

<script>
    // 语法:
    // find(function (当前元素, 当前下标, 数组本身) {
    // return true;
    // })

    let arr = ['a', 'b', 'c', 'd', 'e'];
    let arr2 = arr.find(function (item, index, array) {
        return item === 'a'
    }) // 结果:a

    // 这个地方如果用 filter() 遍历, 会返回 ['a', 'e'], 但是用 find() 遍历只会返回 'a'
    // 因为 find() 遍历时, 只要有一次返回 true, 就会停止遍历
    // 第一次遍历 item === 'a' 这个结果返回 true, 所以遍历直接结束了
    let arr3 = arr.find(function (item, index, array) {
        return item === 'a' || item === 'e'
    })
    console.log(arr2) // 结果:a
</script>

18. reduce() 归并方法


作用:

遍历数组。 每一次遍历, 都会把上一次遍历的结果,当作参数传入,当是第一次遍历时, 因为没有上一次的结果, 所以需要指定一个初始值, 来代替上一次遍历结果

语法结构:

reduce(function (prev, item, index, array) {
 return result
}, init))

参数解释:

  • prev: 上一次遍历的结果
  • item: 当前元素
  • index: 当前索引
  • array: 数组
  • init: 初始值。 用来代替第一次遍历时, 没有上一次结果的情况。第一次遍历时 init 赋值给 prev

使用案例:

<script>
    // 累计求和
    let arr = [1, 2, 3, 4, 5]
    console.log(arr.reduce(function (prev, item, index, array) {
        return prev + item;
    }, 0)) // 结果:15

    // 求最大值
    console.log(arr.reduce(function (prev, item, index, array) {
        return Math.max(prev, item)
    }, 0)) // 结果:5
</script>

案例分析:

(1) 累计求和 - 共遍历五次:
第一次: prev = init = 0, item = 1, index = 0, array = 数组, 返回值 = 0 + 1
第二次: prev = 1, item = 2, index = 1, array = 数组, 返回值 = 1 + 2
第三次: prev = 3, item = 3, index = 2, array = 数组, 返回值 = 3 + 3
第四次: prev = 6, item = 4, index = 3, array = 数组, 返回值 = 6 + 4
第五次: prev = 10, item = 5, index = 4, array = 数组, 返回值 = 10 +

(2) 求最大值 - 共五次遍历
第一次: prev = init = 0, item = 1, index = 0, array = 数组, 返回值 = Math.max(0, 1)
第二次: prev = 1, item = 2, index = 1, array = 数组, 返回值 = Math.max(1, 2)
第三次: prev = 2, item = 3, index = 2, array = 数组, 返回值 = Math.max(2, 3)
第四次: prev = 3, item = 4, index = 3, array = 数组, 返回值 = Math.max(3, 4)
第五次: prev = 4, item = 5, index = 4, array = 数组, 返回值 = Math.max(4, 5)

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

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

相关文章

SpringBoot + HttpSession 自定义生成sessionId

SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景 最近在做用户登录过程中&#xff0c;由于默认ID是通过UUID创建的&#xff0c;缺乏足够的安全性&#xff0c;决定要自定义生成 sessionId。 实现方案 正常的获取session方法如下&#xff1a; HttpSe…

【流量、洪水数据下载】网站介绍和下载经验....不断更新!

EarthData 介绍 NASA:链接 数据下载 视频教程:Discover and Access Earth Science Data Using Earthdata Search 数据下载需要注册,已经被卡在邮箱验证上【2024-12-26】… Essential Climate Variables——【The Global Climate Observing System(GCOS) 介绍 其是支…

Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CI…

少儿编程在线培训系统:客户服务与学习支持

2.1 VUE技术 VUE它是由HTML代码&#xff0c;配上嵌入在HTML代码里面的Java代码组成的应用于服务器端的语言&#xff0c;使用VUE进行开发能够更加容易区分网页逻辑以及网页设计内容&#xff0c;让程序员开发思路更加清晰化&#xff0c;VUE在设计组件时&#xff0c;它是可以重用的…

流批一体向量化计算引擎 Flex 在蚂蚁的探索和实践

编者按&#xff1a;Flex是蚂蚁数据部自研的一款流批一体的向量化引擎&#xff0c;Flex是Fink和Velox的全称&#xff0c;也是Flexible的前缀&#xff0c;被赋予了灵活可插拔的寓意。本文将重点从向量化技术背景、Flex架构方案和未来规划三个方面展开论述。 作者介绍&#xff1a;…

upload-labs关卡记录11

先上传一个一句话木马试试&#xff0c;居然可以上传成功&#xff0c;复制图片链接&#xff0c;在另一个窗口打开&#xff1a; 会发现&#xff0c;我们明明上传的是shell.php&#xff0c;但是这里就是没有了php,这样我们在执行我们相关的语句的时候就无法执行了&#xff1a; 就…

WebRTC服务质量(08)- 重传机制(05) RTX机制

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

借助 obdiag,让 OceanBase 参数和变量的对比更简单

本文将介绍 obdiag 工具中参数对比和变量对比功能的适用场景和试用方法。​​​​​​​ obdiag 参数和变量对比功能的适用场景 参数对比功能适用场景 不同observer对于同一参数允许配置不同的值&#xff0c;实际生产环境中&#xff0c;用户可能因多种原因在不同observer上为同…

Net9解决Spire.Pdf替换文字后,文件格式乱掉解决方法

官方文档 https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Text/Find-and-replace-text-on-PDF-document-in-C.html C# 在 PDF 中查找替换文本 原文件如下图&#xff0c;替换第一行的新编码&#xff0c;把41230441044替换为41230441000 替换代码如下&#xff…

VBA技术资料MF246:将工作表中形状复制到WORD文档

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

一次医院RIS系统的升级

2020-03-11 目录 数据库升级... 1 数据结构升级... 1 系统配置... 2 WEB服务器准备... 3 启动ASP.NET State Service服务... 3 检查IIS. 4 发布站点... 4 添加应用程序池... 4 发布网站... 5 处理打印模板... 6 web.config的配置... 6 处理图片文件目录... 6 修改W…

显示 Windows 任务栏

显示 Windows 任务栏 1. 取消勾选自动隐藏任务栏2. 重启 Windows 资源管理器References 1. 取消勾选自动隐藏任务栏 Windows 任务栏具有自动隐藏功能&#xff0c;不使用时自动隐藏&#xff0c;使用时显示。 鼠标右键单击桌面上的空白区域&#xff0c;个性化 -> 任务栏。不…

【Unity3D】Jobs、Burst并行计算裁剪Texture3D物体

版本&#xff1a;Unity2019.4.0f1 PackageManager下载Burst插件(1.2.3版本) 利用如下代码&#xff0c;生成一个Texture3D资源&#xff0c;它只能脚本生成&#xff0c;是一个32*32*32的立方体&#xff0c;导出路径记得改下&#xff0c;不然报错。 using UnityEditor; using Uni…

轻量级安全云存储方案Hoodik

什么是 Hoodik &#xff1f; Hoodik 是一款轻量级、安全且自托管的云存储解决方案。它采用 Rust 和 Vue 设计和构建&#xff0c;专注于端到端加密&#xff0c;保护您的数据免受窥探和黑客的侵害。Hoodik 支持文件上传和下载&#xff0c;让您可以轻松地与其他用户共享文件。简单…

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同

[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识&#xff0c;在正式开始说WASAPI之前&#xff0c;我想先说一说Qt的Multiple Media&#xff0c;为什么呢&#xff1f;因为Qt的MultipleMedia实际上是WASAPI的一层封装&#xff0c;它在是线…

Linux 大文件管理与 Hugging Face 模型下载实践:解决磁盘空间与大文件传输的全攻略20241226

Linux 大文件管理与 Hugging Face 模型下载实践&#xff1a;解决磁盘空间与大文件传输的全攻略 引言 在 Linux 系统中管理大文件是一项常见但不容忽视的任务&#xff0c;尤其是在处理复杂场景时&#xff0c;比如磁盘空间不足、断点续传下载模型文件、管理日志文件等。通过实际…

TOGAF之架构标准规范-业务架构

TOGAF标准规范中&#xff0c;业务架构阶段的主要工作是开发支持架构愿景的业务架构。 如上所示&#xff0c;业务架构&#xff08;Business Architecture&#xff09;在TOGAF标准规范中处于B阶段&#xff0c;该阶段的主要内容包括阶段目标、阶段输入、流程步骤、架构方法。 阶段…

aPaaS是什么?有何特点?以及aPaaS核心优势有哪些?

​aPaaS是什么&#xff1f; aPaaS&#xff0c;Application Platform as aService&#xff0c;应用程序平台即服务。国际知名咨询机构 Gartner 对aPaaS所下的定义是&#xff1a;“这是基于PaaS(平台即服务)的一种解决方案&#xff0c;支持应用程序在云端的开发、部署和运行&…

【网络分析工具】WireShark的使用(超详细)

网络分析工具——WireShark的使用 简介WireShark软件安装Wireshark 开始抓包示例WireShark抓包界面WireShark 主要分为这几个界面TCP包的具体内容Wireshark过滤器设置wireshark过滤器表达式的规则Wireshark抓包分析TCP三次握手Wireshark分析常用操作 简介 WireShark是非常流…

前端js验证码插件

相关代码,在最上方的绑定资源