数组的分类
- 索引数组:基于0、1这样的整数下标索引的数组,数组具有length属性
- 关联数组:数组元素的下标与元素的值构成key-value,数组的length属性失效
<script>
var indexArray = [];
indexArray.push("AAA");
indexArray.push("BBB");
console.log(indexArray);
console.log(indexArray.length);
var mapArray = [];
mapArray["aaa"] = "AAA";
mapArray["bbb"] = "BBB";
console.log(mapArray);
console.log(mapArray.length);
</script>
数组的基本操作(针对索引数组)
创建数组对象
- 创建数组对象有两种方式:[] + new Array()
<script>
var arr1 = [];
var arr2 = new Array();
console.log(arr1.length, arr2.length);
var arr3 = [1,2,3,4,5]
var arr4 = new Array(1,2,3,4,5);
console.log(arr3.length, arr4.length);
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);
console.log(arr1.pop());
console.log(arr1, arr1.length);
delete arr1[2];
console.log(arr1, arr1.length);
</script>
数组元素CRUD:查找元素
- 基于索引查询:时间复杂度为O(1)
- 线性遍历查询:时间复杂度为O(n) – 遍历整个数组找到目标元素,如果目标元素师数组的最后一个元素,那么需要遍历整个数组,那么数组越长,所需要的时间越长
数组操作案例
元素类型
function Message() {
this.what = 0;
this.arg1 = 0;
this.arg2 = 0;
this.obj = null;
this.when = 0;
}
数组的CRUD操作
<script>
function Message() {
this.what = 0;
this.arg1 = 0;
this.arg2 = 0;
this.obj = null;
this.when = 0;
}
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() {
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>