数组

数组 属于 JavaScript

49 个练习

关于 数组

在 JavaScript 中,数组是一种类似列表的结构,长度不固定,可以存放任意类型的原始值或对象,甚至可以混合存放。 它带有 length 属性,还有许多实用的方法,用于遍历和修改数组。

要创建数组,把元素写在方括号 [] 之间。 要从数组中读取元素,把下标写在标识符后面的方括号 [] 里。数组的下标从零开始。

例如:

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names[1];
// => Laura

也可以用构造函数语法创建数组,但大多数情况下推荐使用数组字面量语法。

const names = new Array();
names.push('Jack', 'Laura', 'Paul', 'Megan');

names[1];
// => Laura

数组不能用strings作为元素下标,必须使用整数(number)。 使用方括号表示法(或点表示法)通过非整数来设置或访问时,并不会设置或读取数组列表本身的元素,而是设置或访问与该数组的对象属性集合相关联的变量。 数组的对象属性和数组元素列表是彼此独立的,数组的遍历和修改操作无法作用于这些具名属性。

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.length;
// => 4

// Properties can be set on arrays using bracket ['property'] or
// dot .property notation, and this will affect the length, as
// shown below.

names.magician = 'Elyse';
names.length;
// => 4

// The property shows up when logging the array, making it seem
// that the property is somehow incorporated in the array.

names;
// => ["Jack", "Laura", "Paul", "Megan", magician: "Elyse"]

// However, be aware. Properties added via non-numeric keys are
// NOT part of the array's internal list, and are not traversed
// or mutated when using one of the traversal or mutation
// operations.

names.forEach((name) => console.log(name));
// => Jack
// => Laura
// => Paul
// => Megan

从数组中删除元素

JavaScript 中的数组也是普通的 objects,可以用 delete 关键字删除其中的元素。 然而,这不会改变数组的 长度,而是留下一个 empty 空洞。 在其他语言中,这类似于稀疏数组。 使用遍历或修改操作时,empty 空洞会被跳过。

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
delete names[1];

names;
// =>  ["Jack", empty, "Paul", "Megan"]

names.length;
// => 4

names.forEach((name) => console.log(name));
// => Jack
// => Paul
// => Megan

如果不希望出现空洞,并且希望 length 反映将被遍历或修改的元素数量,请改用 splice。

splice() 方法通过就地移除或替换现有元素和/或添加新元素来改变数组的内容。1

例如:

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.splice(1, 1);

names;
// =>  ["Jack", "Paul", "Megan"]

names.length;
// => 3

names.forEach((name) => console.log(name));
// => Jack
// => Paul
// => Megan

数组长度可以修改

数组的 length 属性与数组所持有的元素列表相关联。 它可以被修改。 增加长度时,会创建 empty 空洞,遍历或修改数组时不会考虑这些空洞。 减小长度时,会_移除_数组末尾的元素。

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.length = 6;

names;
// => ["Jack", "Laura", "Paul", "Megan", empty × 2]

names.length = 2;
// =>  ["Jack", "Laura"]

检查某个值是否为数组

因为数组是 objects,所以 typeof names 的结果是 "object"。 要检查某个值是否为数组,请使用 Array.isArray:

const names = ['Jack', 'Laura', 'Paul', 'Megan'];

typeof names;
// => "object"

Array.isArray(names);
// => true

const object = {};
Array.isArray(object);
// => false

你可能会想用 names instanceof Array,这有时可行,但并非在所有情况下都适用。 更多信息请阅读这篇文章。

数组方法

每个数组对象都有一些可用的方法,可以用来向数组添加元素或从中删除元素。 下面是其中几个:

push

push() 方法向数组末尾添加一个或多个元素,并返回数组的新长度。2

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.push('Jill'); // => 5
names;
// => ['Jack', 'Laura', 'Paul', 'Megan', 'Jill']

pop

pop() 方法移除数组的最后一个元素,并返回该元素。 此方法会改变数组的长度。3

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.pop(); // => 'Megan'
names;
// => ['Jack', 'Laura', 'Paul']

shift

shift() 方法移除数组的第一个元素,并返回被移除的元素。 此方法会改变数组的长度。4

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.shift(); // => 'Jack'
names;
// => ['Laura', 'Paul', 'Megan']

unshift

unshift() 方法向数组开头添加一个或多个元素,并返回数组的新长度。5

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.unshift('Jill'); // => 5
names;
// => ['Jill', 'Jack', 'Laura', 'Paul', 'Megan']

splice

splice() 方法通过就地移除或替换现有元素和/或添加新元素来改变数组的内容。 此方法返回一个包含被删除元素的数组。1

const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.splice(2, 1, 'Jill'); // => ['Paul']
names;
// => ['Jack', 'Laura', 'Jill', 'Megan']

  1. splice,MDN。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice(参考日期:2021 年 9 月 29 日) ↩

  2. push,MDN。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push(参考日期:2021 年 9 月 29 日) ↩

  3. pop,MDN。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop(参考日期:2021 年 9 月 29 日) ↩

  4. shift,MDN。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift(参考日期:2021 年 9 月 29 日) ↩

  5. unshift,MDN。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift(参考日期:2021 年 9 月 29 日) ↩

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 数组