博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript数据结构与算法——数组
阅读量:6243 次
发布时间:2019-06-22

本文共 1895 字,大约阅读时间需要 6 分钟。

数据结构的分类

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。

常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:

clipboard.png

数组

数组是最简单的内存数据结构,数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。tips:数据一般存储着一系列数据类型相同的值,但在JavaScript中,可以在数组中保存不同类型的值,但一般不需要这么用。

1.创建数组

let daysOfWeek = new Array();let daysOfWeek = new Array(7);let daysOfWeek = new Array('1', '2', '3', '4', '5', '6', '7');

2.添加元素

// 初始化nums数组let nums = [0,1,2,3,4,5,6];// 指定位置添加nums[nums.length] = 7;// 使用push(),把元素添加到数组末尾nums.push(8);// 0...8nums.push(9, 10);// 0...10// 使用unshift,把元素添加到数组首位nums.unshift(-1);// -1...10nums.unshift(-3,-2);// -3...10

3.删除元素

// pop(),删除最后一个nums.pop();//-3...9// shift(),删除第一个nums.shift();//-2...9

4.任何位置删除或添加元素

// splice()方法nums.splice(2, 3);// 删除 index=2 开始的后的3个数 -2,-1,3...9nums.splice(2, 0, 0, 1, 2);// 从index=2开始插入0,1,2  -2...9

5.javascript数组方法参考

concat()  // 连接2个或多个数组,并返回结果every()  // 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回truefilter()  // 对数组中的每一项运行给定函数,返回该函数能返回true的项作为新数组forEach()  // 对数组中的每一项运行给定函数,没有返回值join()  // 按传入的字符连接成一个字符串indexOf()  // 从前往后遍历,返回第一个与传入参数相等的索引值,没找到返回-1lastIndexOf()  // 从后往前遍历,返回第一个与传入参数相等的索引值map()  // 对数组中的每一项运行给定函数,返回每次函数调用的结果组成新的数组reverse()  // 颠倒数组中元素的顺序slice()  // 传入索引值,将数组对应索引值范围内的元素作为新数组返回  some()  // 对数组中的每一项运行给定函数,如果某一项返回true,则返回truesort()  // 按照字母顺序排序,支持传入指定排序方法的函数作为参数toString()  // 将数组作为字符串返回valueOf()  // 和toString类似,将数组作为字符串返回

6.ES6数组新增方法

@@iterator  // 返回一个包含数组键值对的迭代器对象,可通过同步调用得到数组元素的键值对copyWithin()  // 复制数组中一系列元素,到该数组指定的起始位置entries()  // 返回包含数组所有键值对的@@iteratorincludes()  // 数组中存在某个元素则返回true,否则返回false(es7新增)find()  // 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素findIndex()  // 根据回调函数给定的条件从数组中查找元素,如果能找到就返回该元素在数组中的索引fill()  // 用传入参数填充数组from()  // 根据已有数组创建一个新数组keys()  // 返回包含数组所有索引的@@iteratorof()  // 根据传入的参数创建一个新数组values()  // 返回包含数组中所有值的@@iterator

7.数组优缺点

优点:
(1)按照索引查询元素速度快
(2)按照索引遍历数组方便

缺点:

(1)数组的大小固定后就无法扩容了
(2)数组只能存储一种类型的数据
(3)添加,删除的操作慢,因为要移动其他的元素。

适用场景:

频繁查询,对存储空间要求不大,很少增加和删除的情况。

转载地址:http://nvpia.baihongyu.com/

你可能感兴趣的文章
美国诚实签经验(最全集合)
查看>>
HttpContext.Current:异步模式下的疑似陷阱之源
查看>>
《Java与模式》- 创建型模式
查看>>
[Android]使用Kotlin开发Android(二)
查看>>
php将对象数组转成普通数组
查看>>
org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files (x86)\Java\jdk1.7.0_7
查看>>
Python 中的 if __name__ == '__main__' 该如何理解(1)
查看>>
Qt之对话框设计——利用QPalette改变控件颜色
查看>>
#lspci | grep Eth
查看>>
Linux下svn常用指令【转】
查看>>
C#下2\10\16进制互转代码总汇
查看>>
人工智能和机器学习领域的一些有趣的开源项目
查看>>
Objective-C:继承的体现
查看>>
三星发布Exynos 7872移动处理器 定位中端市场
查看>>
面试题大全
查看>>
设计模式系列-命令模式
查看>>
Java中的流
查看>>
如何启动或关闭oracle的归档(ARCHIVELOG)模式
查看>>
[LintCode] Paint Fence 粉刷篱笆
查看>>
mysql中实现类似oracle中的nextval函数
查看>>