当前位置: 首页 > news >正文

JS:数组类型及常用的方法使用

 

目录

01 如何定义?

02 常用方法使用

2.1 重要方法

2.2 较为重要方法 


01 如何定义?

 

JS的数组类型和python的列表有很多相似的地方,可以联想记忆。

 

let num = [1, '你好', 1.2]  // 存储的元素可以是不同的数据类型

 

02 常用方法使用

2.1 重要方法

 

length方法 ==> 返回数组的长度

let num = [1, 2, 3, 4]  // 定义数组num
num_len = num.length  // 数组num中有4个元素, 所以num_len值为4
// 注意, 不需要加上括号, 即num.length()是不需要的

 

push(value)方法 ==> 数组末端添加元素value

let num = [1, 2, 3]
num.push(4)  // 数组num更新为[1, 2, 3, 4]

 

pop(index)方法 ==> 删除数组索引为index的元素并将该元素值返回 ,不传参默认删除数组末端元素并将该元素值返回。

let num = ['q', 'w', 'e', 'r']
num_pop1 = num.pop(2)  // 删除数组中索引为2的元素(即字符'e'), 数组更新为['q', 'w', 'r']
// 函数返回被删除的元素, 所以num_pop1 = 'e'
num_pop2 = num.pop()  // 删除数组中末端的最后一个元素(即字符'r'), 数组更新为['q', 'w']
// 函数返回被删除的元素, 所以num_pop2 = 'r'

 

 unshift(value)方法 ==> 在数组开头添加value并返回添加之后新数组的元素个数(即数组.length)

let num = [1, 2, 3, 4]
num_len = num.unshift(123)  // 在数组开头添加元素123, 数组更新为[123, 1, 2, 3, 4]
// 由于新的数组长度为5, 所以函数返回值为5, 所以num_len = 5

 

shift()方法 ==>  删除数组开头的第一个元素并返回删除之后新数组的元素个数(就数组.length)

let num = [1, 2, 3, 4]
num_len = num.shift()  // 删除数组开头的第一个元素(即1), 所以删除之后的数组为[2, 3, 4]
// 删除之后的数组长度为3, 所以num_len = 3

 

 slice()方法 ==> 切片

let num = [1, 2, 3, 4, 5]
num_slice = num.slice(1, 4)  // 取索引范围为[1:3]的数组, 所以num_slice = [2, 3, 4]
// 注意, 原数组不会发生改变, 即还是[1, 2, 3, 4, 5]
// 该函数只有start和end,没有步长,支持负数切片
num_slice1 = num.slice(0, -1)  // 取索引范围为[0, 3]的数组, 所以num_slice1 = [1, 2, 3, 4]

 

 reverse()方法 ==> 逆序返回数组

let num = ['q', 1, 'w', 2]
num_reverse = num.reverse()  // 将num数组重新排列, 逆序(从后往前), 并将排列好的数组返回
// 返回的数组num_reverse = [2, 'w', 1, 'q']。 注意, 原数组也是这个

 

join(link)方法 ==> 连接字符串, 子字符串之间的连接字符为link

let num = ['q', 111, 'www', 34.45]  // 注意, 并没有数组内所有元素必须是字符串(和python不一样)
num_link = num.join('***')  // 用'***'作为连接字符串,去连接数组内各个元素
// num_link = 'q***111***www***34.45'
// 注意, 原数组没有发生变化, 依旧是['q', 111, 'www', 34.45]

concat()方法 ==> 将数组相加,或者说将两个数组连接在一起变成一个更长的数组

let num1 = [1, 2, 3]
let num2 = ['q', '2', 111.111]
num_concat = num1.concat(num2)  // 将两个数组连接在一起,并将该组合的新数组返回
// 所以新数组num_concat = [1, 2, 3, 'q', '2', 111.111]
// 原数组num1, num2均没有改动

  sort()方法 ==> 将数组进行排序

let num = [4, 3, 2, 1]
num_sort = num.sort()  // 返回升序排列的数组, 并且原数组num也是经过升序排列的数组

2.2 较为重要方法 

三个比较重要的方法

forEach()方法 ==> 类似于python的map()

不过多讲解,直接放代码。

let num = [111, 222, 333, 444, 555]
undefined
num.forEach(function(num_i){console.log(num_i ** 2)}, num)  // 返回元素平方
VM3207:1 12321
VM3207:1 49284
VM3207:1 110889
VM3207:1 197136
VM3207:1 308025
undefined
num.forEach(function(num_i, index){console.log(num_i, index)}, num)  // 返回元素值及其索引
VM3371:1 111 0
VM3371:1 222 1
VM3371:1 333 2
VM3371:1 444 3
VM3371:1 555 4
undefined
num.forEach(function(num_i, index, n){console.log(num_i, index, n)}, num)  // 返回元素值及其索引以及元素所在的数组
VM3621:1 111 0 (5) [111, 222, 333, 444, 555]
VM3621:1 222 1 (5) [111, 222, 333, 444, 555]
VM3621:1 333 2 (5) [111, 222, 333, 444, 555]
VM3621:1 444 3 (5) [111, 222, 333, 444, 555]0: 1111: 2222: 3333: 4444: 555length: 5[[Prototype]]: Array(0)
VM3621:1 555 4 (5) [111, 222, 333, 444, 555]
undefined

splice()方法 ==> 删除指定范围数组,添加数组

let num = [1, 2, 3, 4, 5]
undefined
num.splice(1, 3)  // 从索引1(包括)开始, 往后删除三个元素, 并将删除的元素以数组形式返回
(3) [2, 3, 4]
num  // 删除的元素是2, 3, 4 所以剩下1, 5两个元素
(2) [1, 5]
let num = [11, 22, 33, 44, 55]
undefined
num.splice(2, 2, 666)  // 从索引2开始, 往后删除2个元素, 并将删除的元素以数组的形式返回
(2) [33, 44]
num  // 我们上面的splice()还传入了第三个参数:666, 表示在索引为2的位置添加该参数
(4) [11, 22, 666, 55]
let num = [1, 2, 3, 4, 5]
undefined
num.splice(1, 2, [111, 222, 333])  // 从索引1开始, 往后删除2个元素, 并将删除的元素以数组形式返回
(2) [2, 3]
num  // 这里我们的splice()传入的第三个参数稍微有点不一样, 就是我们传入的是一个数组, 但是还是一样的效果, 就是将数组中索引为1的位置添加该参数, 只不过原来是添加一个数, 现在是添加一整个数组而已
(4) [1, Array(3), 4, 5]

map()方法 ==> 和前面的forEach()方法类似,大同小异

<p>炒茄子</p>

相关文章:

  • Oracle-job跑批变慢案例
  • java/php/python在线求助救援网站vue+elementui
  • Vivado关联Vscode,解决Vscode自动保存和卡顿问题
  • Java基础用Date类编写万年历
  • 前端面试题2
  • 通信算法之七十八:无人机反制—精华总结
  • Leetcode--剑指Offer
  • 【web-攻击应用程序框架】(12.2)共享主机与服务提供商:攻击、保障
  • JavaScript-操作BOM对象
  • position定位总结+元素选择器+window对象的子对象
  • MySQL什么情况会导致索引失效?
  • 力扣(122.1049)补7.29
  • 【数据结构与算法】链表
  • Python中的依赖注入
  • 【MicroPython ESP32】machine.Pin类函数以及参数详解
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • JavaScript异步流程控制的前世今生
  • Java基本数据类型之Number
  • PHP 7 修改了什么呢 -- 2
  • React-redux的原理以及使用
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • yii2中session跨域名的问题
  • 产品三维模型在线预览
  • 基于webpack 的 vue 多页架构
  • 基于游标的分页接口实现
  • ------- 计算机网络基础
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一天一个设计模式之JS实现——适配器模式
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • (0)Nginx 功能特性
  • (70min)字节暑假实习二面(已挂)
  • (一)u-boot-nand.bin的下载
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)从 Java 代码到 Java 堆
  • .Family_物联网
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net项目IIS、VS 附加进程调试
  • @EventListener注解使用说明
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [cb]UIGrid+UIStretch的自适应
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [ESP32] 编码旋钮驱动
  • [Flutter] extends、implements、mixin和 abstract、extension的使用介绍说明
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [jobdu]不用加减乘除做加法
  • [LeeCode]—Wildcard Matching 通配符匹配问题
  • [linux c]linux do_div() 函数用法
  • [linux][调度] 内核抢占入门 —— 高优先级线程被唤醒时会立即抢占当前线程吗 ?
  • [MySQL] 二进制文件
  • [Oh My C++ Diary]\t \n \r的用法
  • [one_demo_5]命令行输入输出
  • [PHP]关联和操作MySQL数据库然后将数据库部署到ECS
  • [pytorch]设备选择以及卷积神经网络的应用
  • [SpringMVC] SpringMVC入门