您现在的位置是:首页 > 正文

java 数组 push pop_JavaScript学习笔记:数组的push()、pop()、shift()和unshift()方法

2024-04-01 05:14:56阅读 4

JavaScript是一种弱类型语言,不像其它程序语言需要严格定义数据类型。在JavaScript中数组可以任意修改变动,这样也就出现了一个问题,如果边遍历数组边操作数组(比如删除当前项,则所有之后的数组元素下标都将向前移动)是一件很危险的事情。

JavaScript的数组是一个拥有堆栈和队列自身优点的global对象。也就是说JavaScript数组可以表现的像栈(LIFO)和队列(FIFO)一样操作。这也是JavaScript数组强大的可操作性的体现。

今天一起来学习JavaScript数组的栈和队列的操作方法。

堆栈和队列

要了解JavaScript数组的堆栈和队列方法的操作,需要先对堆栈和队列基础知识有所了解。在继续后面的内容之前,我们先简单的了解一下堆栈和队列的概念。

栈和队列都是动态的集合,在栈中,可以去掉的元素是最近插入的那一个。栈实现了后进先出。在队列中,可以去掉的元素总是在集合中存在的时间最长的那一个。队列实现了先进先出的策略。

堆栈的基本概念

先上张图:

33aa86cde8d5c683cd58de1de02f9a76.png

栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部。

最开始栈中不含有任何数据,叫做空栈,此时栈顶就是栈底。然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大。数据出栈时从栈顶弹出,栈顶下移,整个栈的当前容量变小。

比如说,我们在一个箱子中放了很多本书,如果你要拿出第二书,那么你要先把第一本书拿出来,才能拿第二本书出来;拿出第二本书之后,再把第一本书放进去。

ECMAScript为数组专门提供了 push() 和 pop() 方法,以便实现类似栈的行为。 push() 方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。而 pop() 方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。

队列的基本概念

栈数据结构的访问规则是LIFO(后进先出),而队列数据结构的访问规则是FIFO(Fist-In-First-Out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。如下图所示:

21941d84fa0152e28cb0157fe89a0fbf.png

比如说火车站排队买票,先到的先买,买好的先走。

入队列操作其实就是在队尾追加一个元素,不需要任何移动,时间复杂度为O(1)。出队列则不同,因为我们已经架设下标为0的位置是队列的队头,因此每次出队列操作所有元素都要向前移动。如下图所示:

73420b164879cdb67191e0bdd39b1bf4.png

ECMAScript为数组专门提供了 shift() 和 unshift() 方法,以便实现类似队列的行为。由于 push() 是向数组末端添加数组项的方法,因此要模拟队列只需一个从数组前端取得数组项的方法。实现这一操作的数组方法就是 shift() ,它能够移除数组中的第一个项并返回该项,同时将数组长度减1。

顾名思义, unshift() 与 shift() 的用途相反:它能在数组前端添加任意个数组项并返回新数组的长度。因此,同时使用 unshift() 和 pop() 方法,可以从相反的方向来模拟队列,即在数组的前端添加数组项,从数组末端移除数组项。

push()方法

该方法是向数组末尾添加一个或者多个元素,并返回新的长度。

push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。如:

var arr = []; //创建一个空数组

console.log(arr); //

网站文章

  • 51Talk-Level 7 Unit 5 L2

    今日主题:保守秘密(keeping a secret )高频口语句型(想到中文但是不能马上联想到英文的):1. break up with somebody 与某人绝交2. lie to somebody 向某人说谎3. be tempted to do something 想做某事4. look up to 羡慕,尊敬5

    2024-04-01 05:14:50
  • leetcode:149. 直线上最多的点数

    题目: 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o ±------------> 0 1 2 3 4 示例 2: 输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 输出: 4 解释: ^ ...

    2024-04-01 05:14:11
  • 高性能(二)

    高性能(二)

    高性能(二)

    2024-04-01 05:14:04
  • 【Linux】项目shell启动脚本简单模本

    背景:启动 tomcat + jar工程

    2024-04-01 05:13:57
  • Pytorch中的转置卷积

    反卷积反卷积(Transposed Convolution)输出大小计算起点可以整除不可以整除综合起来参考文献 反卷积(Transposed Convolution) 又称为转置卷积。 torch.n...

    2024-04-01 05:13:17
  • 安装think PHP5

    安装think PHP5

    Composer安装 Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。 下载地址:https://getcomposer.org/Com...

    2024-04-01 05:13:10
  • java:CAS、ABA问题详解

    1、java中的原子性操作所谓原子性操作,是指执行一系列操作时,这些操作要么全部执行,要么全部不执行,不存在只执行其中一部分的情况。2、CAS方法CAS即Compare and Swap,其是JDK提...

    2024-04-01 05:13:02
  • 系统错误:&H8007007E(-2147024770)。 找不到指定的模块。解决

    系统错误:&H8007007E(-2147024770)。 找不到指定的模块。 就很发呆,以前就正常。 然后发现多个ocx,那肯定是这个组件没有注册了。运行了vb库失败后,便从程序里复制了MSINET.OCX,放到了c:/windows/systems32 下面 然后在开始运行里输入:regsvr32 MSINET.OCX,进行注册 提示注册成功后,完成 程序...

    2024-04-01 05:12:20
  • layui踩坑记录之form表单下的button按钮默认自动提交

    layui踩坑记录之form表单下的button按钮默认自动提交

    因此,当我们在使用form的时候,如果没有添加标准的提交按钮,会自动默认把其他的普通按钮认为是提交按钮,因为button的type默认值为“submit”。其实就是使用form的时候,应该对应有一个提...

    2024-04-01 05:12:12
  • 加快局域网访问时间的方法策略

    法一:将网卡调至全速按下Win+Pause/Break键,单击“硬件”标签,再单击“设备管理器”从而打开“设备管理器”,双击“网络适合器”下相应网卡,在打开窗口中单击“高级”标签,选中Link Spe...

    2024-04-01 05:12:06