JavaScript数据结构
数组基础知识
数组是大多数语言里面最常见的一种数据结构,它是一个有序的值列表
创建数组
创建数组的方式大致可以分为两种:字面量创建数组和使用构造函数创建数组
字面创建数组
let arr = [];
构造函数常见数组
let arr = new Array();
需要注意的是,无论是字面量形式创建的数组,还是构造函数创建的数组,当我们使用typeof来打印其数据类型的时候,都会返回一个object
数组赋值
先声明在赋值
let arr = [] //注意下标是从0开始的
arr[0] = 1;
arr[1] = 2;
声明直接赋值
let arr = [1,2,3,4,5]
需要注意的是我们可以在数组任意位子进行赋值,数组的长度会自动改变,空的位置使用undefined来进行填充
访问数组元素
通过数组的下标,我们可以轻松的访问到储存在数组里面的元素
删除元素
我们可以通过delete运算符来删除数组中的某一个元素
结构数组
就是讲一个复杂类型的数据分解为一个普通类型数据。结构式ES6新添加的功能,可以对数组和对象进行结构
多维数组
首先需要说明的是,js里面不支持传统编程语言中的多维数组。但是没有与js的数组里面所存放的数据的数据类型可以是任意类型,所以我们可以模拟出多维数组
拓展运算符
拓展运算符是ES6开始新添加的运算符,用于去除可迭代的对象的每一项。有了这个运算符以后,我们可以使用它将字符串快速转为数组
数组相关属性和方法
相关属性
length:返回数组元素的个数。我们利用此元素,可以快速的晴空数组,这种方法比使用重新赋值的效率要 高些
相关方法
添加删除方法
push在后面添加元素
pop在后面删除元素
unshift在头部添加元素
shift在头部删除元素
推入的时候可以一次性推入多个元素,返回的是新数组的长度
弹出的时候一次只能弹出一个元素,返回的是弹出的元素
操作方法
concat:该方法是先创建当前数组的一个副本,然后将接受到的参数添加到副本的末尾,最后返回新构建的数组,儿原本的数组不会变化
slice:该方法可以接受一个或者两个参数,代表返回项的起始和结束位子。
splice:这个方法非常厉害,可以实现对数组的三种类型的操作:删除,插入和替换,相当于是增删改操作都可以用这个方法来实现
数组和字符串相互转换
join
将数组转为字符串,可以传入分隔符作为参数
split
将字符串转为数组,传入参数指明以什么作为分隔符
数组重排序方法
重排序涉及到两个方法:reverse和sort
reverse:翻转数组项的顺序,注意使用该方法时会改变原来数组的顺序,而不是返回一个副本
sort:按照升序排列数组的每一项
位置方法
includes:用于查看数组里面是否包含某个元素,包含返回true,否则返回false
indexif和lastindexof,都接收两个参数:要查找的项目和查找的起点位置索引,区别在于一个是从数组开头开始找,一个是从数组末尾开始找。没有找到就返回-1.
集合
创建结合
直接使用new 就可以创建一个set对象,如果想要集合在创建时就包含初始值,那么我们可以传入一个数组进去
给集合添加值
使用add()方法可以给一个集合添加值,由于调用add方法以后返回的又是一个Set对象,所以我们能连续掉用add方法进行值的添加
集合相关属性和方法
size属性获取元素个数
使用has方法来查看一个集合中是否包含某一个值
使用delete可以删除Set对象里面的某一个元素;如果要一次删除所有的元素,可以使用clear方法
遍历集合
集合也是可以枚举的,我们同样可以使用for-of来对集合进行遍历,或者通过forEach来进行遍历
也可以使用keys,values,entries方法对集合进行遍历
映射
创建映射
使用new关键字与Map够着函数,就可以创建一个空的map对象
映射的相关属性和方法
has(key)检车指定的键名在map映射中是否已经存在
delete(key)从map映射中的溢出指定键名及其对应的值
clear()移除map映射中的所有键值
映射的遍历
与集合一样,映射也是可以枚举的,所以可以用与集合类似的方式进行遍历
for-of
keys
values
entries
映射转为数组
map结构转为数组结构,比较快速的方法还是使用前面介绍过的扩展运算符...,或者使用array对象的from方法