JavaScript 中 数组(Array)的 pop/push, shift/unshift 方法以及性能比较

pop/push, shift/unshift 方法

队列(queue)是最常见的使用数组的方法之一。在计算机科学中,这表示支持两个操作的一个有序元素的集合:

  • push 在末端添加一个元素.
  • shift 取出队列首端的一个元素,整个队列往前移,这样原先排第二的元素现在排在了第一。
    在这里插入图片描述

这两种操作数组都支持。

队列的应用在实践中经常会碰到。例如需要在屏幕上显示消息队列。

数组还有另一个用例,就是数据结构

它支持两种操作:

  • push 在末端添加一个元素.
  • pop 从末端取出一个元素.
    在这里插入图片描述

所以新元素的添加和取出都是从“末端”开始的。

栈通常被被形容成一叠卡片:要么在最上面添加卡片,要么从最上面拿走卡片:

对于栈来说,最后放进去的内容是最先接收的,也叫做 LIFO(Last-In-First-Out),即后进先出法则。而与队列相对应的叫做 FIFO(First-In-First-Out),即先进先出。

JavaScript 中的数组既可以用作队列,也可以用作栈。它们允许你从首端/末端来添加/删除元素。

这在计算机科学中,允许这样的操作的数据结构被称为 双端队列(deque)

作用于数组末端的方法:

  • pop
    取出并返回数组的最后一个元素:
 let fruits = ["Apple", "Orange", "Pear"];
alert( fruits.pop() ); // 移除 "Pear" 然后 alert 显示出来
alert( fruits ); // Apple, Orange

fruits.pop()fruits.at(-1)
都返回数组的最后一个元素,但 fruits.pop() 同时也删除了数组的最后一个元素,进而修改了原数组。

  • push

    在数组末端添加元素:

let fruits = ["Apple", "Orange"];
fruits.push("Pear");
alert( fruits ); // Apple, Orange, Pear

调用 fruits.push(...)fruits[fruits.length] = ... 是一样的。

作用于数组首端的方法:

  • shift
    取出数组的第一个元素并返回它:
let fruits = ["Apple", "Orange", "Pear"];
alert( fruits.shift() ); // 移除 Apple 然后 alert 显示出来
alert( fruits ); // Orange, Pear
  • unshift
    在数组的首端添加元素:
let fruits = ["Orange", "Pear"];
fruits.unshift('Apple');
alert( fruits ); // Apple, Orange, Pear

pushunshift 方法都可以一次添加多个元素:

let fruits = ["Apple"];

fruits.push("Orange", "Peach");
fruits.unshift("Pineapple", "Lemon");

// ["Pineapple", "Lemon", "Apple", "Orange", "Peach"]
alert( fruits );
性能

push/pop 方法运行的比较快,而 shift/unshift 比较慢。
在这里插入图片描述
为什么作用于数组的末端会比首端快呢?让我们看看在执行期间都发生了什么:

fruits.shift(); // 从首端取出一个元素

只获取并移除索引 0 对应的元素是不够的。其它元素也需要被重新编号。

shift 操作必须做三件事:

  1. 移除索引为 0 的元素。
  2. 把所有的元素向左移动,把索引 1 改成 02 改成 1 以此类推,对其重新编号。
  3. 更新 length 属性。
    在这里插入图片描述
    数组里的元素越多,移动它们就要花越多的时间,也就意味着越多的内存操作。

unshift 也是一样:为了在数组的首端添加元素,我们首先需要将现有的元素向右移动,增加它们的索引值。

push/pop 是什么样的呢?它们不需要移动任何东西。如果从末端移除一个元素,pop 方法只需要清理索引值并缩短 length 就可以了。

pop 操作的行为:

fruits.pop(); // 从末端取走一个元素

pop

pop 方法不需要移动任何东西,因为其它元素都保留了各自的索引。这就是为什么 pop 会特别快。

push 方法也是一样的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,那我来简单介绍一下 JavaScript 数组的用法以及如何操作图片。 1. JavaScript 数组的用法 JavaScript 数组是一组按照顺序排列的值的集合。数组的每个值称为元素,每个元素都有一个对应的数字位置,称为索引。JavaScript 数组的索引从 0 开始,因此第一个元素的索引为 0,第二个元素的索引为 1,以此类推。 下面是 JavaScript 数组的一些常见操作: (1)创建数组 可以使用数组字面量来创建一个数组,如下所示: ``` let arr = [1, 2, 3, 4, 5]; ``` 也可以使用 Array 构造函数来创建一个数组,如下所示: ``` let arr = new Array(1, 2, 3, 4, 5); ``` (2)访问数组元素 可以使用方括号语法来访问数组的元素,如下所示: ``` let arr = [1, 2, 3, 4, 5]; console.log(arr[0]); // 输出 1 console.log(arr[1]); // 输出 2 console.log(arr[2]); // 输出 3 ``` (3)修改数组元素 可以使用方括号语法来修改数组的元素,如下所示: ``` let arr = [1, 2, 3, 4, 5]; arr[0] = 0; console.log(arr); // 输出 [0, 2, 3, 4, 5] ``` (4)数组长度 可以使用 length 属性来获取数组的长度,如下所示: ``` let arr = [1, 2, 3, 4, 5]; console.log(arr.length); // 输出 5 ``` (5)数组方法 JavaScript 数组还提供了很多有用的方法,如 pushpopshift、unshift、splice、concat、slice 等等,这些方法可以方便地操作数组的元素。具体使用方法可以参考 JavaScript 文档。 2. 如何操作图片 在 JavaScript ,可以使用 Image 对象来加载和操作图片。下面是 Image 对象的一些常见操作: (1)创建 Image 对象 可以使用 new 关键字来创建一个 Image 对象,如下所示: ``` let img = new Image(); ``` (2)加载图片 在 Image 对象上设置 src 属性可以加载图片,如下所示: ``` let img = new Image(); img.src = 'path/to/image.png'; ``` (3)获取图片宽度和高度 在 Image 对象上获取 width 和 height 属性可以获取图片的宽度和高度,如下所示: ``` let img = new Image(); img.src = 'path/to/image.png'; img.onload = function() { console.log(img.width); // 输出图片宽度 console.log(img.height); // 输出图片高度 } ``` (4)绘制图片 在 Canvas 上使用 drawImage 方法可以绘制图片,如下所示: ``` let canvas = document.getElementById('canvas'); let ctx = canvas.getContext('2d'); let img = new Image(); img.src = 'path/to/image.png'; img.onload = function() { ctx.drawImage(img, 0, 0); } ``` 以上是 JavaScript 数组的用法以及如何操作图片的简单介绍,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值