JS数据结构

一、数组

1、保留插入顺序
2、通过索引访问元素(索引与排序有关系)
3、可迭代
4、JS数组大小可以动态调整,但内存无法掌控(c++静态数组,长度不可变)
5、允许值重复,且可以为混合类型
6、删除和查找元素比较消耗性能 eg: find() 和 findIndex()
~~~遍历查询,消耗性能,删除元素后,后边元素向前补位
7、有序集合,可以通过索引值访问
查询元素
find()
findIndex()
删除元素
splice()

arr.concat() 返回被连接数组的一个副本
arr.join() 返回被指定分割符分割的字符串
arr.slice(startIndex,endIndex) 返回被剪切的元素片段
arr.pop() 返回被删除的元素,如果是空数组则不改变原数组,返回undefined
arr.push()  返回指定的值添加到数组后的新长度
arr.shift() 功能:把数组的第一个元素从中删除,返回值:被删除的元素
arr.unshift() 功能:向数组的开头添加一个或多个元素,返回值:返回数组的新长度
arr.splice() 功能:向数组添加项目或者从数组中删除项目  返回值:参数2被删除的元素数组
arr.reverse() 功能:颠倒数组中元素的顺序  返回值:返回颠倒顺序之后的数组
arr.sort()    返回值:排序之后的数组

原型方法:
Array.prototype.indexOf
Array.prototype.lastIndexOf
Array.prototype.every
Array.prototype.some
Array.prototype.forEach
Array.prototype.map
Array.prototype.filter
Array.prototype.reduce
Array.prototype.reduceRight
Array.prototype.includes
Array.prototype.find
Array.prototype.findIndex

ES6方法:
Array.of(): 将元素列表转为数组,避免new Array()带来的诡异行为
Array.from(iterator,fn,obj): 将具有Iterator接口的对象或类数组转为数组
Array.keys()
Array.values()
Array.entries()

二、集合(Sets)

1、实例化创建,add添加
2、元素不能重复(元素唯一性)
3、无序集合,存储和读取的顺序可能不一样,无法通过索引值访问,需要通过方法访问或获取元素
4、for循环可遍历
5、大小(长度)可动态调整
6、删除和查找元素简单快捷(不会影响其他元素位置,因此性能消耗较低)
添加元素:
add()
访问元素:
has()
删除元素:
delete()

三、对象(Object)

1、无序的键值对数据
2、通过键名(属性)访问元素
3、不可遍历(for...in除外)
4、键是唯一的,值不是
5、可以存储数据和函数
6、有原型方法
删除属性
delete person.age

四、映射(Maps)

1、有序的键值对数据
2、通过键访问元素
3、可遍历(for循环)
4、键是唯一的,值不是
5、键可以是各种类型的值(包括对象、数组)
6、纯数据存储,针对数据访问进行了优化
7、大数据量时,性能优于对象
实例化:
new Map()
添加元素:
map.set(‘average‘,1.6)

五、弱集合与弱映射

集合和映射的 变体,值和键仅"弱引用",如果未在应用程序的其他任何地方使用,垃圾回收则可以删除键和值

六、链表

单链表:每一个元素都知道下一个元素
可以有效的调整大小并再列表的开头和结尾插入

1、为什么使用链表

历史上,为方便内存管理(节约内存):不必事先指定内存大小,防止多余内存浪费
如今,JS具有动态数组,而内存也并不再是JS应用程序中的主要问题

  • 在列表的开头进行高频插入操作,链表会很有用--链表比数组操作更快

七、衡量性能(时间复杂度 -- 大O符号)

1、线性时间复杂度
2、常数阶时间复杂度
3、对数阶时间复杂度
4、线性对数时间复杂度
5、平方阶时间复杂度

*** 代码执行时间的增长变化趋势

八、列表&表格

  • 列表:值的集合,eg:数组、集合、链表
  • 适合存储通过位置(通过索引或搜索)检索的值,也适合循环
  • 表格:键值对的集合 eg:对象、映射 适合存储通过键检索的值,不关注循环

九、列表-堆栈

1、Last In, First Out 简化的数组
2、栈顶推入 Push 栈顶删除 Pop
3、使用场景:调用堆栈

十、队列

十一、哈希表

JS数据结构

上一篇:JS三座大山_原型与原型链


下一篇:web站点如何搜集?