• 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、使用场景:调用堆栈

    十、队列

    十一、哈希表

  • 相关阅读:
    解决:git使用git push 命令跳出remote: Permission to A denied to B的问题
    IDEA显示Run Dashboard窗口
    Nginx设置上传文件大小限制
    JavaScript- The Good Parts function Curry
    用java面向对象的思想实现的汉诺塔问题
    第一章、架设服务器前的准备工作 基本架设服务器流程
    第一章、架设服务器前的准备工作
    A Plain English Guide to JavaScript Prototypes
    JavaScript- The Good Parts Chapter 4
    JavaScript- The Good Parts Chapter 3 Objects
  • 原文地址:https://www.cnblogs.com/nanhuaqiushui/p/14406347.html
Copyright © 2020-2023  润新知