Javascript数组系列一之栈与队列

Stella981
• 阅读 593

所谓数组(英语:Array),是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。 组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。 ---百度百科

简单理解,数组就是数据的有序列表。

Array 在 Javascript 中属于最常用的数据类型之一了,与其它语言一样 Javascript 中的数组也是数据的有序列表,但是与其他语言有所不同的是,它可以用于保存任何数据类型,而且数组的长度是可以动态调整的。

var elements = ['first', 2, {age: 14}];

创建数组

既然认识了数组,那我们先看怎么创建一个数组吧!Javascript 提供两种创建数组的方法。

1.通过构造函数创建

var arr1 = new Array(); //[]var arr2 = new Array(3); //[,,] 创建一个包含三项的数组var arr3 = new Array(3, 4) //[3, 4]var arr4 = new Array('3'); //['3']var arr5 = new Array('2','3'); //['2','3']

看到上面的结果简直蒙逼,因此可以看出参数传递的不同产生的结果也会不一样,而且结果令人惊讶,不过我们可以总结为:如果传入一位数值类型的参数时,则创建给一个定项的数组(例如 arr2 ),如果传入其他类型的参数时,则会创建一个包含当前参数的数组(例如 arr4, arr5),

我们这个方法比较坑,所以一般不会使用这个方法去创建数组,那么我们继续看下一个方法如何创建数组的。

2.通过字面量创建

var arr1 = [];var arr2 = [1, 2];var arr3 = ['1', '3'];

就是这么简单,粗暴,明了;是我们创建数组最常用的方法,而且这种方法创建还非常高效。

如何访问和设置数组

上面说到我们是如何创建一个数组,数组创建出来之后我们需要对数组中的元素进行访问或修改吧?下面我们就来看看吧

  • 访问数组,通过索引访问数组中的元素,索引从 0 开始,如果访问的索引大于数组中元素的个数怎么办呢?结果肯定是找不到的,所以会返回 undefined 。

说到数组元素的个数我们不能不提到数组的一个属性了,那就是 length 属性,它会返回当前数组元素的个数,
而且 length 属性不是只读属性,它还可以去修改,因此我们利用 length 属性即可以添加数组的元素,还可以删除数组的元素。

var arr = ['first', 'second', 'three'];console.log(arr[0]); //firstconsole.log(arr[1]); //secondconsole.log(arr[3]); //undefined//利用 length 删除元素arr.length = 2;console.log(arr); //["first", "second"]//利用 length 添加元素(可以利用此方法在数组的末尾添加元素)arr[arr.length] = 'five';console.log(arr); //["first", "second", "five"]

如何表现的和「栈」一样

想要知道数组怎么表现的和「栈」一样,首先我们先来了解一下什么是「栈」。

在这里我们不深究「栈」,如果深究下去一时半会我们也说不清楚,也不是我们本文的重点。

简单来说,「栈」是一种数据结构,一种 LIFO (Last-In-First-Out)的数据结构,也就是后进先出,最新添加进来的元素最早被移出。
在 「栈」中添加数据和删除数据也被称为推入和弹出,而且推入和弹出只会发生在「栈」的顶部。

Javascript数组系列一之栈与队列 stack 图片

Javascript 提供为数组提供了两个方法以便于我们实现「栈」的行为,下面我们就来看看吧。

  • push : 向数组的末尾添加元素,可以传入任意数量的参数

  • pop:从数组的末尾删除最后一项,返回删除的元素,使数组的 length-1

    var arr = ['A', 'B', 'C'];arr.push('D');console.log(arr); //['A', 'B', 'C', 'D']var rem = arr.pop();console.log(arr);//['A', 'B', 'C']console.log(rem); // 'D'

如何表现的和 「队列」一样

上回我们说到 Javascript 中的数组可以有「栈」一样的行为,那么它也可以表现出和「队列」一样的行为。

「栈」是一种 LIFO 数据结构,而「队列」则是一种 FIFO(First In First Out)的数据结构,即先进先出。

数据在「队列」的末尾添加元素,在前端移出元素,上面说到我们可以利用 push 方法在数组的末尾添加元素,那么什么方法在数组的前端去移出元素呢?答案就是 shift() 方法。

Javascript数组系列一之栈与队列 队列

  • shift:删除数组的第一个元素,返回删除的元素,使数组的 length-1

可以看出它与pop()方法刚好相反

var arr = ['A', 'B', 'C'];arr.push('D');console.log(arr); //['A', 'B', 'C', 'D']var rem = arr.shift();console.log(arr);//['B', 'C', 'D']console.log(rem); // 'A'

我们可以看到上面我们是在末尾添加元素,前端删除元素,但是我们可以不可以在前端添加元素,在末尾删除元素呢?也就是说我们能不能反向模拟「队列」。

Javascript 中为我们提供了一个方法然后我们配合pop()方法我们就可以实现反向的模拟。那就是 unshift()。

Javascript数组系列一之栈与队列 队列2

  • unshift():在数组的开头添加任意个数的元素

    var arr = ['A', 'B', 'C'];arr.unshift('D');console.log(arr); //[ 'D', 'A', 'B', 'C']var rem = arr.pop();console.log(arr);//['D', 'A', 'B']console.log(rem); // 'C'

总结

「数组」在 Javascript 中是最为常见的引用类型的数据结构,其重要性是不言而喻的,因此「数组」也拥有比较多的方法,如果一个篇幅写下来会非常非常的长,这样不仅不利于阅读而且也非常考验读者对耐性,细水长流,所以我们分两篇文章去介绍,如果你对文章感兴趣,可以持续关注,如果喜欢呢,你也可以转发,点赞,对作者也是一种支持!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
PTA1
11数组定义中,数组名后是用方括号括起来的常量表达式,不能用圆括号。(1分)\T\F12在C语言中能逐个地使用下标变量,也能一次引用整个数组。(1分)T\F\因为它有首地址13同一个数组中的每个元素都具有相同的数据类型,有统一的标识符即数组名,用不同的序号即下标来区分数组中的各元素。(1分)\T\F14数
Wesley13 Wesley13
3年前
Java开发者容易犯的十个错误
!(https://oscimg.oschina.net/oscnet/c9f00cc918684fbe8a865119d104090b.gif)Top1.数组转换为数组列表将数组转换为数组列表,开发者经常会这样做:\java\List<StringlistArrays.asList(arr);Arr
Wesley13 Wesley13
3年前
Java中的数组(Array)
数组对于每一门编程语言来讲都是最重要的数据结构之一,当然不同的编程语言对数组的实现以及处理也不尽相同。数组的概念:把有限个相同类型元素变量放在一个整体,这个整体就叫做数组。数组中的每一个元素被称为数组元素,通常可以通过数组元素的索引(也叫下标,可以理解为一种编号,从0开始)来访问数组元素,包括数组元素的赋值(set)和取值(get)。
Stella981 Stella981
3年前
HashMap 的底层实现原理
HashMap是一个用于存储KeyValue键值对的集合,每一个键值对也叫做Entry。这些个Entry分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。 !(https://oscimg.oschina.net/oscnet/8495d30fe00a2865dd74088d2
Wesley13 Wesley13
3年前
C语言自学《五》
什么是数组数组是一组数目固定、类型相同的数据项数组中的数据称为元素比如longnumbers\10\;方括号中的数字定义了要存放在数组中的元素个数,称为数组维度数组有一个类型,它组合了元素的类型和数组中的元素个数,因此如果两个数组的元素个数、类型相同,这两个数组的类型就相同可以在数组名称后的方括号内使用索引值,索引值是从0开始
Wesley13 Wesley13
3年前
C#图解教程 第十二章 数组
数组数组数组实际上是由一个变量名称表示的一组同类型的数据元素。每个元素通过变量名称和一个或多个方括号中的索引来访问:数组名索引↓↓MyArray4定义让我们从C中与数组有关的重要定义开始元素数组的独立数据项称为元素。数组的所有元素必须
达里尔 达里尔
11个月前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数