跳转到内容

JavaScript/数组

来自维基教科书,开放世界中的开放书籍




在 JavaScript 中,数组是一个对象,您可以在其中存储一组值,并使用单个变量名称来引用它们。到目前为止,这与许多其他语言相同。但也有区别。

  • 这些值不必是相同的数据类型。您可以将您想要的一切放入数组,并在稍后处理数据类型。(但也有 类型化数组,其中所有值都具有相同的数据类型。)
  • 创建数组时,您不需要声明大小 - 但您可以。数组会自动增长。这使得数组非常方便使用,但不适合数值分析中的应用程序。
  • 由于数组是对象,因此它们具有可以随意调用的方法和属性。例如,.length 属性表示数组中当前有多少个元素。如果您向数组中添加更多元素,.length 的值会变大。
  • 元素计数从 0 开始,这意味着,例如,第 5 个元素位于 [4] 中。

(提示:使用数组时,您应该始终使用带非负整数的方括号表示法,例如 arr[3] = 42;。从技术上讲,使用点表示法也是可以的,但这会 - 至少对于初学者 - 导致意想不到的行为。)

创建数组

[编辑 | 编辑源代码]

首先,与所有对象一样,有一个构造函数。

"use strict";

const arr_1 = new Array(); // empty array
alert(arr_1.length);
const arr_2 = new Array(0, 2, 4); // 3 elements
alert(arr_2);

接下来,JavaScript 语法在创建或使用数组时支持方括号。

"use strict";

const arr_1 = []; // empty array
alert(arr_1.length);
const arr_2 = [0, 2, 4]; // 3 elements
alert(arr_2);

您可以在声明数组时预先定义其大小。

"use strict";

const arr_3 = new Array(50); // 50 elements
alert(arr_3.length);

访问数组元素

[编辑 | 编辑源代码]

使用常用的方括号表示法访问数组元素进行读写。

"use strict";

const arr_4 = [0, 2, 4, 6, 8];
alert(arr_4[3]);  // 6
arr_4[0] = 9;
alert(arr_4); // 9, 2, 4, 6, 8

当您访问数组实际长度之外的元素时,数组的大小会增长,并且会创建新元素。

"use strict";

const arr_5 = [0, 2, 4, 6, 8];
arr_5[10] = 9;
alert(arr_5); // 0,2,4,6,8,,,,,,9
alert(arr_5.length); // 11

不同数据类型

[编辑 | 编辑源代码]

您可以在数组中存储不同数据类型的值。

"use strict";

const arr_6 = [0, "two", 4]; // number and string
console.log(arr_6);        // [0, "two", 4]

// and even values of data type 'array' can be stored
const arr_7 = [10, 11];
arr_7[2] = arr_6;          // array in array
console.log(arr_7);        // [10, 11, [0, "two", 4]]
console.log(arr_7.length); // 3

嵌套数组

[编辑 | 编辑源代码]

如前所述,数组元素可能是数组(它本身可能包含类型为数组的元素(它本身可能包含...))。这可能在运行时或初始化期间发生。要直接访问较低级别,您必须根据需要指定尽可能多的方括号对 [] 来到达该级别。

"use strict";

const arr_8 = [ [0, 1], [10, 11, 12, 13], [20, 21] ];
console.log(arr_8[2]);    // one level goes to an array of numbers: [20, 21]
console.log(arr_8[1][1]); // two levels go to a number: 11

// same with assignments ...
arr_8[2][0] = "twenty";
console.log(arr_8[2]); // ["twenty", 21]

... 以及更复杂的情况

"use strict";

const arr_9 = []; // empty
arr_9[0] = [];
arr_9[0][0] = [];
arr_9[0][0][2] = "Hallo world!";
console.log(arr_9);  // [[[undefined, undefined, "Hallo world!"]]]

arr_9[2] = "Third element of first level";
console.log(arr_9);
// [[[undefined, undefined, "Hallo world!"]], undefined, "Third element of first level"]

属性和方法

[编辑 | 编辑源代码]

length 是每个数组的属性(它不是方法)。它表示该数组中的元素数量。

alert([0, 1, 2].length);  // 3

请注意,数组索引是从零开始的。因此,数组的长度比最后一个索引大。

concat 方法返回两个或多个数组的组合。要使用它,首先,您需要两个或多个要组合的数组。

const arr1 = ["a","b","c"];
const arr2 = ["d","e","f"];

然后,创建一个第三个数组,并将它的值设置为 arr1.concat(arr2)

const arr3 = arr1.concat(arr2); //arr3 now is: ["a","b","c","d","e","f"]

请注意,在本示例中,新的 arr3 数组包含 arr1 数组和 arr2 数组的内容。

joinsplit

[编辑 | 编辑源代码]

join 方法返回一个包含数组所有元素的单个字符串 - 由指定的分隔符隔开。如果未指定分隔符,则将其设置为逗号。

还有一个 split 方法,它执行与 join 相反的操作:它对字符串进行操作,根据指定的分隔符将其划分为元素,并返回包含这些元素的数组。(提示:split字符串数据类型的方法,而不是数组的方法。)

要使用 join,首先创建一个数组。

const abc = ["a", "b", "c"];

然后,创建一个新变量,并将其赋值为 abc.join()

const a = abc.join();  // "a,b,c"

您也可以使用专用的分隔符。

// use 'semicolon' plus 'space' as delimiter
const b = abc.join("; ");  // "a; b; c"

使用字符串的 split 方法将其转换回数组。

const a2 = a.split(",");  // ["a", "b", "c"]
const b2 = b.split("; "); // ["a", "b", "c"]

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

"use strict";
const arr = [0, 1, 2, 3];

alert(arr);                // 0, 1, 2, 3
const len = arr.push(100);
alert(len);                // 5
alert(arr);                // 0, 1, 2, 3, 100

pop 方法删除数组的最后一个元素,并返回该元素。

"use strict";
const arr = [0, 1, 2, 3];

alert(arr);                // 0, 1, 2, 3
const elem = arr.pop();
alert(elem);               // 3
alert(arr);                // 0, 1, 2

pushpop 在数组的末尾起作用;它们互为逆运算。

unshift 方法将一个或多个新元素添加到数组的开头,并返回数组的新长度。它的工作原理是将每个旧元素从其旧索引 移到 ,将新元素添加到索引 ,并采用数组的 length 属性。它类似于 push,但在数组的开头起作用。

"use strict";
const arr = [0, 1, 2, 3];

alert(arr);                // 0, 1, 2, 3
const len = arr.unshift(100);
alert(len);                // 5
alert(arr);                // 100, 0, 1, 2, 3

shift 方法移除数组的第一个元素并返回被移除的元素。它的工作原理是将每个旧元素从其旧索引 “移位” 到 ,采用数组的 length 属性,并返回旧的第一个元素。它类似于 pop,但在数组的开头工作。

"use strict";
const arr = [0, 1, 2, 3];

alert(arr);                // 0, 1, 2, 3
const elem = arr.shift();
alert(elem);               // 0
alert(arr);                // 1, 2, 3

unshiftshift 在数组的开头工作;它们的作用相反。

... 在另一个页面上可用(点击这里)。

另请参阅

[编辑 | 编辑源代码]
华夏公益教科书