进击的JavaScript小白(三)——数组

js里面万物皆对象。
看,我有很多对象呢。
双十一不购物怎么了?我是有对象的人,我不过光棍节!

一、基本数据类型和复杂数据类型的区别

1、保存的数据个数不同

2、在内存中保存的方式不同

1、基本数据类型在内存单元中保存的是具体值
2、复杂数据类型在内存单元中保存的是具体值的指针

3、复制操作后的结果不同

1、复制数据类型操作实际上是复制内存单元中保存的那个东西
2、基本数据类型复制前后,两个值没有关联
3、复杂数据类型复制前后,两个值实际上是同一个值

二、数组

1、数组的作用

用于保存多个数据

2、数组的声明方式

var arr = new Array(100, 98, 89, 78);
var arr = [100, 98, 89, 78]; // 这种方式是推荐方式,因为书写简便。

3、数组的长度属性

arr.length : 用于获取数组中的数据总个数,是数值类型

4、数组的操作

1、元素:数组中的数据统称为数组的元素
2、索引
① 数组中的每个元素按照索引值排列,索引从零开始,依次递增
② 由于数组中的元素按照索引排列,数组也被称为是一种有序的数据存储方式
③ 利用索引操作元素 :arr[0]
④ 数组最后一个元素的索引值 : arr.length - 1
3、数组的长度操作
① 将数组的length设置为大于实际元素的个数的值,这个值没有意义,平常不会用
② 访问数组中不存在的元素,默认值为undefined
③ 将数组的length设置为1小于实际元素个数的值可以将数组末尾的一些值删除
4、数组的遍历操作 : 使用循环获取数组中的所有元素

 var arr = ['a', 'b', 'c', 'b', 'c', 'b', 'c'];
 for (var i = 0; i < arr.length; i++) {
	console.log(arr[i]);
 }

反向遍历

	for (var i = arr.length - 1; i >= 0; i--) {
		console.log(arr[i]);
	}

5、数组中可以有多种类型的数据,不过推荐一个数组中只保存一种类型的数据。

三、冒泡排序

1、计数法

var arr = [1, 2, 3, 5, 4];
for (var i = 0; i < arr.length - 1; i++) {
	// 每轮代码执行时需要考虑,如果本轮比较中没有发生交换操作,说明排序完毕了(上一轮)
	var count = 0; // 用于记录本轮比较中发生交换的次数
	for (var j = 0; j < arr.length - 1 - i; j++) {
		if (arr[j] > arr[j + 1]) {
			var temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
			// 发生交换,设置计数增加
			count++;
		}
	}
	// 当本轮中所有次的比较均执行完毕,检测count的值,如果为0,结束循环
	if (count === 0) {
		break;
	}
}

2、变量控制

var arr = [1, 2, 3, 5, 4];
for (var i = 0; i < arr.length - 1; i++) {
// 我们前面发现,本轮中是否进行过交换时决定是否可以跳出的关键点
var flag = true; // 表示假设本轮排序完毕可以结束
for (var j = 0; j < arr.length - 1 - i; j++) {
	if (arr[j] > arr[j + 1]) {
		var temp = arr[j];
		arr[j] = arr[j + 1];
		arr[j + 1] = temp;
		// 如果进入了if,阻止跳出操作
		flag = false;
	 }
}
	// 验证flag的值
	if (flag === true) {
		break;
	 }
}

四、数组去重

		var arr = [1, 2, 1, 1, 2, 3, 3];
		var result = [];
		// 1 遍历arr,获取所有元素
		for (var i = 0; i < arr.length; i++) {
			// 规则:需要使用arr[i]与result中每个元素比较,如果没有一个是相同的,就放入
			var count = 0; // 用于保存于arr[i]相同的元素的个数
			// 2 遍历result,获取所有元素
			for (var j = 0; j < result.length; j++) {
				if (arr[i] === result[j]) {
					// 如果找到相同的值,设置count++
					count++;
				}
			}
			// 如果count为0,说明result中不存在当前值,放入
			if (count === 0) {
				result[result.length] = arr[i];
			}
		}

五、数组类型检测方法

第一个博客我大致写了一下数据类型的检测方法,现在我写一下数组类型的检测方法和检测结果。
① typeof : 用于检测大部分基本数据类型,typeof arr 的结果为object
② instanceof 操作符 : arr instanceof Array 的结果为true
③ constructor属性 : arr.constructor === Array 的结果为true
④ Object.prototype.toString.call(数据):能够得到数据的类型名称
Object.prototype.toString.call(arr) 控制台打印的结果为 ‘[object Array]’

猜你喜欢

转载自blog.csdn.net/weixin_40589472/article/details/83961934
今日推荐