# 数组初识

# 数组简介

数组(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
上次更新: 9/2/2019, 5:09:05 PM