Javascript数组系列一之栈与队列
所谓数组(英语: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]); //first
console.log(arr[1]); //second
console.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)的数据结构,也就是后进先出,最新添加进来的元素最早被移出。
在 「栈」中添加数据和删除数据也被称为推入和弹出,而且推入和弹出只会发生在「栈」的顶部。
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() 方法。
队列
- 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()。
队列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 中是最为常见的引用类型的数据结构,其重要性是不言而喻的,因此「数组」也拥有比较多的方法,如果一个篇幅写下来会非常非常的长,这样不仅不利于阅读而且也非常考验读者对耐性,细水长流,所以我们分两篇文章去介绍,如果你对文章感兴趣,可以持续关注,如果喜欢呢,你也可以转发,点赞,对作者也是一种支持!
Javascript数组系列一之栈与队列的更多相关文章
- Javascript数组系列五之增删改和强大的 splice()
今天是我们介绍数组系列文章的第五篇,也是我们数组系列的最后一篇文章,只是数据系列的结束,所以大家不用担心,我们会持续的更新干货文章. 生命不息,更新不止! 今天我们就不那么多废话了,直接干货开始. 我 ...
- Javascript数组系列二之迭代方法1
我们在<Javascript数组系列一之栈与队列 >中介绍了一些数组的用法.比如:数组如何表现的和「栈」一样,用什么方法表现的和「队列」一样等等一些方法,因为 Javascript 中的数 ...
- Javascript数组系列三之迭代方法2
今天我们来继续 Javascript 数组系列的文章,上文 <Javascript数组系列二之迭代方法1> 我们说到一些数组的迭代方法,我们在开发项目实战的过程中熟练的使用可以大大提高我们 ...
- 数组、链表、栈、队列和STL
数组 数组是一种最基本的数据结构,它是内存上的一块连续存储空间.正因如此数组的随机访问很方便.但数组也有其固有的限制,大小分配后不能改变. STL中的数组 STL中的Array是静态数组模板,就是我们 ...
- LeetCode刷题 --杂篇 --数组,链表,栈,队列
武汉加油,中国加油.希望疫情早日结束. 由于疫情,二狗寒假在家不能到处乱逛,索性就在家里系统的刷一下算法的内容,一段时间下来倒也有些小小的收获.只是一来家中的小破笔记本写起博客来实在不是很顺手,二来家 ...
- Javascript数组系列四之数组的转换与排序Sort方法
今天我们继续来介绍 Javascirpt 数组中的方法,也是数组系列的第四篇文章,因为数组的方法众多,每篇文章我们都对数组的每个方法都有比较细致的描述,只要你能够从中成长一点点,那我们的目的就达到了, ...
- ACM金牌选手讲解LeetCode算法《栈和队列的高级应用》
大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM金牌,保研985,<ACM金牌选手讲解LeetCode算法系列>作者. 上一篇文章讲解了<线性表>中的数组.链 ...
- 第七章:Javascript数组
数组是值的有序结合.每个值叫做一个元素,而每个元素在数组中都有一个位置,用数字表示,称为索引. javascript数组是无类型的:数组的元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类 ...
- 栈 VS 队列
linkStack.javalinkQueue.java程序强调栈和队列是概念上的实体,独立于它们的具体实现.用数组或者是用链表实现栈都是一样的.栈的重要性在于它的push()操作和pop()操作.以 ...
随机推荐
- freemarker常见语法大全,灰常有用!
由于公司前端使用的技术是freemarker,于是没事就在网上看看别人写的关于freemarker的文章,感觉freemarker灰常简单,比jsp好用,jsp太乱太臃肿了,另外推荐大家看看freem ...
- Ocelot简易教程(七)之配置文件数据库存储插件源码解析
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储 ...
- ASP.NET Core 2.1 使用Docker运行
重要提示,本文为 ASP.NET Core 2.1 如果你是 2.2 那么请将文中的镜像换为 microsoft/dotnet:2.2.0-aspnetcore-runtime 即可,其他操作一样 1 ...
- ELK实践(一):基础入门
虽然用了ELK很久了,但一直苦于没有自己尝试搭建过,所以想抽时间尝试尝试.原本打算按照教程 <ELK集中式日志平台之二 - 部署>(作者:樊浩柏科学院) 进行测试的,没想到一路出了很多坑, ...
- 在 Windows 上可以用 Docker 吗?
作者:陈计节 个人博客:https://blog.jijiechen.com/post/docker-on-windows/ Docker,或者准确一点说,容器技术,在近几年里几乎成为了应用分发和集群 ...
- jdk8 分隔字符串最新方法
//已字符串分隔方法最新 方法 StringJoiner stringJoiner=new StringJoiner(","); stringJoiner.add("a& ...
- git版本管理规范
一.基本开发流程: 二.分支命名 2.1主分支 ① master :随时可供在生产环境中部署的代码 ② dev: 保存当前稳定并且最新的开发分支(多人开发同一分支) 2.2辅助分支 主要用于新功能的并 ...
- python使用多进程
python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势. 针对计算密集型场景需要使用多进程,python的multipro ...
- SQL Server 2008 R2 下如何清理数据库日志文件
废话不多说,直接上代码,清理后日志文件为1M USE [master] GO ALTER DATABASE [数据库名] SET RECOVERY SIMPLE WITH NO_WAIT GO ALT ...
- Web笔记(一) Web 简介与开发环境搭建
Web应用程序的工作原理 大多数的Web应用程序结构都是采用最为流行的B/S软件开发体系结构,将Web应用程序部署在Web服务器上,只要Web服务器启动,用户就可以通过客户端浏览器发送HTTP请求到W ...