天天看点

JavaScript 数据结构(一): 数组JavaScript 数据结构系列目录前言一、数组的概述二、数组的应用场景三、数组的创建四、数组元素访问与迭代数组五、添加数组元素六、删除数组元素七、二维数组八、多维数组相关文章

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 数据结构(一): 数组JavaScript 数据结构系列目录前言一、数组的概述二、数组的应用场景三、数组的创建四、数组元素访问与迭代数组五、添加数组元素六、删除数组元素七、二维数组八、多维数组相关文章

三、数组的创建

使用 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 数据结构(一): 数组JavaScript 数据结构系列目录前言一、数组的概述二、数组的应用场景三、数组的创建四、数组元素访问与迭代数组五、添加数组元素六、删除数组元素七、二维数组八、多维数组相关文章

不过在 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
];
           

示例图如下:

JavaScript 数据结构(一): 数组JavaScript 数据结构系列目录前言一、数组的概述二、数组的应用场景三、数组的创建四、数组元素访问与迭代数组五、添加数组元素六、删除数组元素七、二维数组八、多维数组相关文章

循环迭代二维数组

如果我们想要看看这个矩阵的输出,可以创建一函数来专门输出其中的值。

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 将数组转化为字符串

继续阅读