网站

JavaScript 数组 - W3School

Array - JavaScript | MDN

引入

前面学的变量只能保存一个值。如果需要保存一组数据,比如班级里所有同学的名字、购物车里所有商品,就需要用到数组。

数组可以把多个数据有序地放在一起,通过索引来访问每一个元素。

正文

定义

定义

数组是一种有序的数据集合,可以保存多个值,每个值通过索引(从 0 开始)来访问。

创建数组

数组字面量

最常用的方式,用 [] 创建。

let fruits = ["苹果", "香蕉", "橘子"];
 
let numbers = [1, 2, 3, 4, 5];
 
let mixed = [1, "hello", true, null];

数组里的元素可以是任意类型,也可以混合不同类型。

new Array()

也可以用构造函数创建。

let list = new Array(1, 2, 3);
 
console.log(list);

如果只传一个数字参数,会创建指定长度的空数组。

let empty = new Array(5);
 
console.log(empty.length);

通常推荐用数组字面量,更直观。

索引

数组里每个元素都有一个编号,叫索引,从 0 开始。

let fruits = ["苹果", "香蕉", "橘子"];
 
console.log(fruits[0]);
console.log(fruits[1]);
console.log(fruits[2]);

通过索引也可以修改元素。

fruits[1] = "西瓜";
 
console.log(fruits);

访问不存在的索引会返回 undefined

console.log(fruits[10]);

length 属性

length 返回数组的元素个数。

let fruits = ["苹果", "香蕉", "橘子"];
 
console.log(fruits.length);

length 也可以用来判断数组是否为空。

let list = [];
 
console.log(list.length === 0);

最后一个元素的索引是 length - 1

let fruits = ["苹果", "香蕉", "橘子"];
 
console.log(fruits[fruits.length - 1]);

遍历数组

for 循环

let fruits = ["苹果", "香蕉", "橘子"];
 
for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

for…of

for…of 可以直接拿到每个元素,不需要用索引。

let fruits = ["苹果", "香蕉", "橘子"];
 
for (let fruit of fruits) {
  console.log(fruit);
}

forEach()

forEach() 是数组的方法,接收一个回调函数。

let fruits = ["苹果", "香蕉", "橘子"];
 
fruits.forEach(function (fruit) {
  console.log(fruit);
});

也可以用箭头函数简写。

fruits.forEach(fruit => {
  console.log(fruit);
});

forEach() 的回调还可以接收第二个参数 index

fruits.forEach((fruit, index) => {
  console.log(index + ": " + fruit);
});

多维数组

数组里的元素也可以是数组,这就是多维数组。

let matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
 
console.log(matrix[0]);
console.log(matrix[1][2]);

matrix[1][2] 先取到第二行 [4, 5, 6],再取第三个元素 6

判断是否为数组

let list = [1, 2, 3];
 
console.log(Array.isArray(list));
console.log(Array.isArray("hello"));

typeof 对数组返回 "object",不能区分数组和普通对象,要用 Array.isArray()

常见写法

写法作用
let arr = [];创建空数组
let arr = [1, 2, 3];创建数组并赋值
arr[0]访问第一个元素
arr[0] = 10;修改第一个元素
arr.length获取数组长度
for (let item of arr) {}遍历数组元素
arr.forEach(fn)遍历数组(回调方式)
Array.isArray(arr)判断是否为数组

特点

  • 数组用 [] 创建,元素用 , 分隔
  • 索引从 0 开始
  • length 返回元素个数
  • 数组可以保存不同类型的值
  • forfor…offorEach() 都可以遍历数组
  • Array.isArray() 用来判断一个值是否为数组

理解

可以把数组理解为一排有编号的柜子

每个柜子有一个编号(索引),从 0 开始。柜子里可以放任何东西,数字、文字、甚至其他数组都行。

要知道有多少个柜子,看 length。要拿某个柜子里的东西,用编号去找。

数组的重点不在于创建,而在于对它做增删改查的操作。

引出

理解了数组的基础之后,可以继续学习 JS 数组方法,掌握数组的增删改查、查找、排序等操作。

数组的遍历和 JS 循环 也有密切关系。