# 数组初识
# 数组简介
数组(Array)是属于内置对象,我们可以在MDN网站上查询各种方法。
数组和普通对象的功能类似,也是用来存储一些值的。不同的是:
- 普通对象是使用字符串作为属性名的,而数组是使用数字来作为索引来操作元素。索引:从 0 开始的整数就是索引。
数组的存储性能比普通对象要好。在实际开发中我们经常使用数组来存储一些数据,使用频率非常高。
# 数组的基本操作
数组的元素可以是任意的数据类型,也可以是对象,也可以是函数,也可以是数组。
数组的元素中,如果存放的是数组,我们就称这种数组为二维数组。
# 创建数组对象
方式一:字面量定义。举例:
var arr = [1, 2, 3];
方式二:对象定义(数组的构造函数)。
var arr = new Array();
如果参数为空,则表示创建一个空数组;参数位置是一个数值时,表示数组长度;参数位置是多个数值时,表示数组中的元素。
# 向数组中添加元素
语法:
数组[索引] = 值;
代码举例:
var arr1 = [];
// 向数组中添加元素
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
arr[3] = 44;
# 获取数组中的元素
语法:
数组[索引];
数组的索引代表的是数组中的元素在数组中的位置,从 0 开始。
如果读取不存在的索引(比如元素没那么多),系统不会报错,而是返回 undefined。
代码举例:
var arr = [21, 22, 23];
console.log(arr[0]); // 打印结果:21
console.log(arr[5]); // 打印结果:undefined
# 获取数组的长度
可以使用length
属性来获取数组的长度(元素的个数)。
语法:
数组的长度 = 数组名.length;
代码举例:
var arr = [21, 22, 23];
console.log(arr.length); // 打印结果:3
补充:
对于连续的数组,使用 length 可以获取到数组的长度(元素的个数);对于非连续的数组,使用 length 会获取到数组的最大的索引+1。因此,尽量不要创建非连续的数组。
# 修改数组的长度(修改 length)
如果修改的 length 大于原长度,则多出部分会空出来,置为 null。
如果修改的 length 小于原长度,则多出的元素会被删除,数组将从后面删除元素。
代码举例:
var arr1 = [11, 12, 13];
var arr2 = [21, 22, 23];
// 修改数组 arr1 的 length
arr1.length = 1;
console.log(arr1);
// 修改数组 arr2 的 length
arr2.length = 5;
console.log(arr2);
打印结果:
[11][(21, 22, 23, null, null)];
# 遍历数组元素
var arr = ["张三", "john", "李四", "王五"];
// 1. for循环
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
// 2. for in
for (var key in arr) {
console.log(arr[key]);
}
# 数组的基本方法
# push()
push()
:向数组的最后面插入一个或多个元素,返回结果为该数组新的长度。
语法:
数组.push(元素);
代码举例:
var arr = ["王一", "王二", "王三"];
var result1 = arr.push("王四"); // 末尾插入一个元素
var result2 = arr.push("王五", "王六"); // 末尾插入多个元素
console.log(result1); // 打印结果:4
console.log(result2); // 打印结果:6
console.log(arr); // 打印结果:["王一","王二","王三","王四","王五","王六"]
# pop()
pop()
:删除数组中的最后一个元素,返回结果为被删除的元素。
语法:
数组.pop();
代码举例:
var arr = ["王一", "王二", "王三"];
var result1 = arr.pop();
console.log(result1); // 打印结果:王三
console.log(arr); // 打印结果:["王一","王二"]
# unshift()
unshift()
:在数组最前面插入一个或多个元素,返回结果为该数组新的长度。插入元素后,其他元素的索引会依次调整。
语法:
数组.unshift(元素);
代码举例:
var arr = ["王一", "王二", "王三"];
var result1 = arr.unshift("王四"); // 最前面插入一个元素
var result2 = arr.unshift("王五", "王六"); // 最前面插入多个元素
console.log(result1); // 打印结果:4
console.log(result2); // 打印结果:6
console.log(arr); // 打印结果:["王五","王六","王四","王一","王二","王三"]
# shift()
shift()
:删除数组中的第一个元素,返回结果为被删除的元素。
语法:
数组.shift();
代码举例:
var arr = ["王一", "王二", "王三"];
var result1 = arr.shift();
console.log(result1); // 打印结果:王一
console.log(arr); // 打印结果:["王二","王三"]
# concat()
concat()
:连接两个或多个数组,返回结果为新的数组。(不会改变原数组)
语法:
新数组 = 数组1.concat(数组2, 数组3 ...);
代码举例:
var nameArr1 = ["张三", "李四"];
var nameArr2 = ["王五", "赵六"];
var nameArr = nameArr1.concat(nameArr2);
console.log(nameArr); // ['张三','李四','王五','赵六']
console.log(nameArr1); // ['张三','李四']
console.log(nameArr2); // ['王五','赵六']
// 并未改变原数组,所以我要用一个新数组nameArr去接收合并后的数组,以便后续使用。
# join()
join()
:将数组转换为字符串,返回结果为转换后的字符串(不会改变原来的数组)。
补充:join()
方法可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符;如果不指定连接符,则默认使用 ,
作为连接符,此时和 toString()的效果是一致的
。
语法:
新的字符串 = 原数组.join(参数); // 参数选填
代码举例:
var arr = [1, 2, 3];
var arrStr = arr.join("-");
console.log(arrStr); // 1-2-3
console.log(arr); // [1,2,3]
// 并未改变原数组
# split()
split()
:通过指定分隔符,如果省略,默认以逗号分隔,将字符串分割为字符串数组。
语法:
新数组 = 原字符串.split(分隔符, 数组长度);
第二个参数,制定返回数组的最大长度。
代码举例:
var email = "abc@163.com;cc@126.com;frg@qq.com";
var emailArr = email.split(";");
console.log(emailArr); // ["abc@163.com", "cc@126.com", "frg@qq.com"]
var emailArr2 = email.split(";", 2);
var emailArr = email.split(";"); // ["abc@163.com", "cc@126.com"]
# 数组使用案例
# 求数组平均值
var arr = [32, 41, 1, 40, 12, 5];
// 计算数组元素的和,获取数组元素个数,求平均值
var sum = 0;
for (var i = 0; i < arr.length; i++) {
// sum = sum + arr[i]
sum += arr[i];
}
var avg = sum / arr.length;
console.log(avg); // 21.833333333333332