Javascript数据结构与算法02:数组

数组的分类

  • 索引数组:基于0、1这样的整数下标索引的数组,数组具有length属性
  • 关联数组:数组元素的下标与元素的值构成key-value,数组的length属性失效
<script>
	var indexArray = [];	// 索引数组
	indexArray.push("AAA");
	indexArray.push("BBB");
	console.log(indexArray); 
	console.log(indexArray.length);	// 得到元素的个数为2
	//--------------------------------------
	var mapArray = [];		// 关联数组
	mapArray["aaa"] = "AAA";
	mapArray["bbb"] = "BBB";
	console.log(mapArray); 
	console.log(mapArray.length); // 得到元素的个数为0
</script>

在这里插入图片描述


数组的基本操作(针对索引数组)

创建数组对象

  • 创建数组对象有两种方式:[] + new Array()
<script>
	// 创建一个空数组
	var arr1 = [];			
	var arr2 = new Array();
	console.log(arr1.length, arr2.length); // 0,0
	//-------------------------------------------
	// 创建具有5个元素的数组,元素的值为1,2,3,4,5
	var arr3 = [1,2,3,4,5]  
	var arr4 = new Array(1,2,3,4,5);
	console.log(arr3.length, arr4.length); //5,5
	//-------------------------------------------
	// 创建具有5个元素的数组,但是元素的值都是undefined
	var arr5 = new Array(5);
	console.log(arr5);
</script>

数组元素CRUD:添加删除元素

  • 后进先出(LIFO:栈):push()pop()
  • 先进先出(FIFO:队列):shift()unshift()
  • 删除任意索引的元素:splice(index, count) – arr.splice(index,1)删除index位置上的元素
  • pop()、unshift()、splice(index, count)删除与delete arr[index]是不同的
  • pop()、unshift()、splice(index, count)会导致数组元素重新排列,即元素移位,arr.length会改变
  • delete arr[index]仅仅是将数组arr的index索引的元素的值设置为undefined,arr.length是不变的:删除数组中的元素绝对不能使用delete
<script>
	var arr1 = [];
	for (var i = 0; i < 5; i++) {
		arr1.push(i + 1);
	}
	console.log(arr1, arr1.length); // [1, 2, 3, 4, 5] 5
	console.log(arr1.pop());		// 5
	console.log(arr1, arr1.length); // [1, 2, 3, 4] 4-->数组length-1
	delete arr1[2];					// 本质是执行arr1[2] = undefined这个赋值操作
	console.log(arr1, arr1.length); // [1, 2, empty, 4] 4-->索引为2的元素的值为undefined
</script>

数组元素CRUD:查找元素

  • 基于索引查询:时间复杂度为O(1)
  • 线性遍历查询:时间复杂度为O(n) – 遍历整个数组找到目标元素,如果目标元素师数组的最后一个元素,那么需要遍历整个数组,那么数组越长,所需要的时间越长

数组操作案例

元素类型

function Message() { 	// 作为数据载体
	this.what = 0; 		// 消息的标识 int what;
	this.arg1 = 0; 		// 消息携带的整型数据 int arg1;
	this.arg2 = 0; 		// 消息携带的整型数据 int arg2;
	this.obj = null;	// 消息写到的对象数据 Object obj;
	this.when = 0;		// 消息产生的时间或消息投递到消息队列中的时间 long when;
}

数组的CRUD操作

<script>
	function Message() { 	// 作为数据载体
		this.what = 0; 		// 消息的标识 int what;
		this.arg1 = 0; 		// 消息携带的整型数据 int arg1;
		this.arg2 = 0; 		// 消息携带的整型数据 int arg2;
		this.obj = null;	// 消息写到的对象数据 Object obj;
		this.when = 0;		// 消息产生的时间或消息投递到消息队列中的时间 long when;
	}
	
	// 创建一个具有10000个元素的数组arr[0]~arr[9999],每个数组元素都是Message类型的对象
	var arr = [];

	// 添加元素
	function addElement() {
		for (var i = 0; i < 10000; i++) {
			var msg = new Message();
			msg.what = i;
			msg.arg1 = 0;
			msg.arg2 = 0;
			msg.obj = null;
			if (i == 500) {
				msg.obj = {};
			}
			msg.when = new Date().getTime();
			arr[i] = msg; // 添加元素
		}
	}

	// 删除元素
	function delElement(index) {
		arr.splice(index, 1);
	}

	// 查找元素
	function queryObjNotNull() { // 查找Message的obj属性不为null的元素
		for (var i = 0, len = arr.length; i < len; i++) {
			var msg = arr[i];
			if (msg.obj) {
				return msg;
			}
		}
	}

	// 添加元素
	addElement();
	console.log(arr);

	// 删除元素
	delElement(0);
	console.log(arr);

	// 查询元素
	console.log(queryObjNotNull());
</script>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值