JavaScript 数据结构系列目录
JavaScript 数据结构(一): 数组
JavaScript 数据结构(二): 栈
JavaScript 数据结构(三):队列
JavaScript 数据结构(四):双端队列
JavaScript 数据结构(五):链表
JavaScript 数据结构(六):集合
JavaScript 数据结构(七):字典
JavaScript 数据结构(八):散列表
JavaScript 数据结构(九):树
JavaScript 数据结构(十):二叉堆和堆排序
JavaScript 数据结构(十一):图
文章目录
- JavaScript 数据结构系列目录
- 前言
- 一、数组的概述
- 二、数组的应用场景
- 三、数组的创建
- 四、数组元素访问与迭代数组
- 五、添加数组元素
-
- 1、在数组末尾添加元素
- 2、在数组头部添加元素
- 六、删除数组元素
-
- 1、移除尾部元素
- 2、移除头部元素
- 3、在数组任意位置删除或添加元素
- 七、二维数组
-
- 循环迭代二维数组
- 八、多维数组
- 相关文章
前言
本着巩固知识的目的,一边学着一边写博客。
如果能够帮到正在观看这篇文章或者这个系列的你,那么我会深感荣幸。
当然了,受限于个人水平不是很高,所以可能有些地方,或者细节讲不到位,还请多多包涵(可以提出意见,我尽量修改+)。
一、数组的概述
基本上所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。
数组能够存储一些列同一种数据类型的值,虽然在 JavaScript 里可以保存不同类型的值。
但为了遵循最佳实践,我们还是避免这么做。
二、数组的应用场景
假设有这么个需求:保存 A 市每个月的平均温度,我们可以这样做:
const averageTempJan = 10;
const averageTempFeb = 12.5;
const averageTempMar = 18.9;
const averageTempApr = 25;
...
当然了,这样做肯定不是最好的方案,因为如果像是这样,我们要保存光是一个城市的一年的数据,就有12个变量了,若是有好几年呢?
所以这个时候我们使用数组的好处就体现出来了。
不仅如此,我们使用数组还能够更直观的呈现信息,如:
const averageTemp = [];
averageTemp[0] = 10;
averageTemp[1] = 12.5;
averageTemp[2] = 18.9;
averageTemp[3] = 25;
...
以下是 averageTemp 里的内容示例图
三、数组的创建
使用 JavaScript 声明与创建数组很简单。
可以通过 new 一个array 对象,也可以直接通过括号的形式创建( [] ),如下所示:
let array = new Array();
array = new Array(7);// 在使用 new 关键字的时候创建的数组,可传入一个值指定数组的长度。
array = new Array("C","R");// 当然也可以传一些数组里默认的值。
array = ["C","R"];// == new Array("C","R")
四、数组元素访问与迭代数组
想要访问数组里特定位置的元素,可用中括号传递数值的位置,得到想得到的值或覆盖一个新值,如:
let array = ["C","R"];
console.log(array[0]);// 输出 C
array[0] = "Chen";
console.log(array[0]);// 输出 Chen
如果想要查看数组里的所有元素,那么我们可以通过循环来迭代数组,如:
let array = ["Chen","Rarin","Luo","Quan"];
for ( let i = 0; i < array.length; i++ ) {
console.log(array[i]);
}
其输出结果依次为:
Chen
Rarin
Luo
Quan
除了 for 循环外,JavaScript 还有其他方法可以循环,如 while , do… while 等,这里不过多介绍。
文章末尾有一些关于数组操作的文章链接。
五、添加数组元素
1、在数组末尾添加元素
假设我们想要往末尾插入新值,我们可以这样做。
array[array.length] = "Guo";
// array = ["Chen","Rarin","Luo","Quan","Guo"]
但我们有更好的方式来实现它。
array.push("Guo");
array.push("Hao","Zhen");
// array = ["Chen","Rarin","Luo","Quan","Guo","Hao","Zhen"]
2、在数组头部添加元素
上面我们说了如何在元素的尾部添加元素,只需要使用 push 方法或者直接为数组当前长度位置赋予信值就可以在尾部添加元素。那我们要在头部添加新值呢?
我们可以在 Array 的原型上添加一个方法,代码如下:
array = ["Chen","Rarin","Luo","Quan"];
Array.prototype.insertFirstPosition = function(val) {
for ( let i = this.length; i >= 0; i-- ) {
this[i] = this[i - 1];
}
this[0] = val;
}
array.insertFirstPosition("Ca");
// array = ["Ca","Chen","Rarin","Luo","Quan"];
下图描述了这个方法的操作过程。
不过在 JavaScript 里面,数组有个方法叫 unshift,可以直接将值插入到数组的开头(此方法背后的逻辑与 insertFirstPosition 方法的逻辑是一致的)。
六、删除数组元素
1、移除尾部元素
array.pop();
// array = ["Chen","Rarin","Luo"];
2、移除头部元素
array.shift();
// array = ["Rarin","Luo"];
3、在数组任意位置删除或添加元素
array.splice(0,2);// *1
// array = []
array.splice(0,0,"Chen","Guo","Luo","Deng","Lin","Quan");// *2
// array = ["Chen","Guo","Luo","Deng","Lin","Quan"];
*1 的代码指的是 数组元素是从索引为0的元素开始删除2个元素。
*2 的代码指的是 数组元素是从索引为0的元素开始删除0个元素,并在索引为0的元素的位置是插入值。
七、二维数组
记得篇头的那个保存 A 市每个月平均温度的例子吗?现在我们打算再利用一下这个例子,不同的是,我们把记录的数据扩展到每年。现在我们已知可以用数组来保存这些数据,那么要保存近两年的数据就可以这样做。
let averageTempYear1 = [11,12,13,20,30,33,35,24,23,33,23,12];
let averageTempYear1 = [19,10,9,15,26,28,30,33,34,30,23,5];
然而这不是最好的方法,还可以做得更好。我们可以使用矩阵(二维数组,即数组里的数组)来存储这些信息。矩阵的行保存每年的数据,列对应每个月的数据。
let averageTemp = [
[11,12,13,20,30,33,35,24,23,33,23,12],// Year1
[19,10,9,15,26,28,30,33,34,30,23,5]// Year2
];
示例图如下:
循环迭代二维数组
如果我们想要看看这个矩阵的输出,可以创建一函数来专门输出其中的值。
const printArray = (array) => {
for ( let i = 0; i < array.length; i++ ) {
for ( let j = 0; j < array[i].length; j++ ) {
console.log(array[i][j]);
}
}
}
我们需要迭代所有的行与列,因此我们必须使用一个嵌套的循环来处理,其中 i 为行,j 为列。
而在这个矩阵里, array[i] 同样代表一个数组。
八、多维数组
二维数组其实就是一种多维数组。因此不过多介绍。
End
相关文章
JavaScript 迭代器函(every,some,forEach,map,filter,reduce)
ES6(ECMAScript 6) 数组新功能
JavaScript 数组合并(concat)
JavaScript 数组排序
JavaScript 数组搜索
JavaScript 将数组转化为字符串