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 数组的内容。
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
push
和 pop
在数组的末尾起作用;它们互为逆运算。
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
unshift
和 shift
在数组的开头工作;它们的作用相反。