共计 1744 个字符,预计需要花费 5 分钟才能阅读完成。
数据结构的分类
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:
数组
数组是最简单的内存数据结构,数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从 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…8
nums.push(9, 10);// 0…10
// 使用 unshift,把元素添加到数组首位
nums.unshift(-1);// -1…10
nums.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…9
nums.splice(2, 0, 0, 1, 2);// 从 index= 2 开始插入 0,1,2 -2…9
5.javascript 数组方法参考
concat() // 连接 2 个或多个数组,并返回结果
every() // 对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true
filter() // 对数组中的每一项运行给定函数,返回该函数能返回 true 的项作为新数组
forEach() // 对数组中的每一项运行给定函数, 没有返回值
join() // 按传入的字符连接成一个字符串
indexOf() // 从前往后遍历,返回第一个与传入参数相等的索引值,没找到返回 -1
lastIndexOf() // 从后往前遍历,返回第一个与传入参数相等的索引值
map() // 对数组中的每一项运行给定函数,返回每次函数调用的结果组成新的数组
reverse() // 颠倒数组中元素的顺序
slice() // 传入索引值,将数组对应索引值范围内的元素作为新数组返回
some() // 对数组中的每一项运行给定函数,如果某一项返回 true, 则返回 true
sort() // 按照字母顺序排序,支持传入指定排序方法的函数作为参数
toString() // 将数组作为字符串返回
valueOf() // 和 toString 类似,将数组作为字符串返回
6.ES6 数组新增方法
@@iterator // 返回一个包含数组键值对的迭代器对象,可通过同步调用得到数组元素的键值对
copyWithin() // 复制数组中一系列元素,到该数组指定的起始位置
entries() // 返回包含数组所有键值对的 @@iterator
includes() // 数组中存在某个元素则返回 true, 否则返回 false(es7 新增)
find() // 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素
findIndex() // 根据回调函数给定的条件从数组中查找元素,如果能找到就返回该元素在数组中的索引
fill() // 用传入参数填充数组
from() // 根据已有数组创建一个新数组
keys() // 返回包含数组所有索引的 @@iterator
of() // 根据传入的参数创建一个新数组
values() // 返回包含数组中所有值的 @@iterator
7. 数组优缺点优点:(1)按照索引查询元素速度快(2)按照索引遍历数组方便
缺点:(1)数组的大小固定后就无法扩容了(2)数组只能存储一种类型的数据(3)添加,删除的操作慢,因为要移动其他的元素。
适用场景:频繁查询,对存储空间要求不大,很少增加和删除的情况。