JavaScript中的数组是一个对象,用于表示相似类型的元素的集合。 我们可以在一个变量名中存储多个值或一组值。 数组用于按时间顺序存储值的集合。 数组是同类元素的集合,或者说数组是相同数据类型的值的集合。
1. 语法
声明数组的方法有两种:
// 声明
let myArray;
// 初始化
myArray = [val1, val2, .., valN]
// 或者
let myArray = [val1,val2, .., valN]
数组参数包含整数和字符串的列表。 建议使用数组文字来创建数组,而不要使用new
关键字。new
关键字只会使代码复杂化,有时会产生意外的结果。如果在数组的构造函数中指定单个数字参数(或使用new
关键字创建数组),则它将被视为数组的长度。
注意:数组允许的最大长度为
4,294,967,295
。
2. 访问数组元素
数组从0开始索引。数组名称后跟下标用于引用数组元素。
示例代码:
let num;
num = [2,4,6,8];
console.log(num[0]);
console.log(num[1]);
执行上面示例代码,得到以下结果:
2
4
3. 数组构造器
可以使用数组构造函数创建一个数组。 数组构造函数可以通过以下方式传递:
- 值列表,以逗号分隔,或
一个数值,指示数组的大小
let myArray = [ 4, 8, 13, 6, 55, 41, 42, 99, 1 ];
console.log("Length of myArray: " + myArray.length); // 9 Elements
console.log("Element at index 0: " + myArray[0]); // 4
console.log("Element at index 1: " + myArray[1]); // 8
console.log("Element at index 4: " + myArray[4]); // 55
可以将新值分配给数组元素:
let names = [ "Trump", "Putin", 100 ];
console.log("Length of array: " + names.length); // 3 Elements
console.log("Element at index 0: " + names[0]); // Trump
console.log("Element at index 1: " + names[1]); // Putin
console.log("Element at index 2: " + names[2]); // 100
// Assign new value to element at index 2:
names[2] = "Merkel";
console.log("Element at index 2: " + names[2]);
使用循环,可以这样访问数组元素:
let fruits = ["Acerola", "Apple", "Banana", "Breadfruit", "Carambola" ];
for( let index = 0; index < fruits.length; index++) {
console.log("Index: " + index+" Element value: " + fruits[index]);
}
4. JavaScript数组
JavaScript支持以下类别的数组。
多维数组
- 将数组传递给函数
- 从函数返回数组
4.1. ES6多维数组
ES6还支持多维数组概念。 多维数组可以定义为对另一个数组的值的数组引用。多维数组未在JavaScript中直接提供。 如果需要创建多维数组,则需要使用一维数组来完成。
我们也可以把二维数组看作是多维数组的最简单形式。
声明
以下语法说明了如何在JavaScript中声明二维数组。
二维数组中元素的访问 -let array_name = [[value1,value2,value3],[val1,val2,val3]];
示例代码:let array_name[initial_array_index][referenced_array_index]
执行上面示例代码,得到以下结果:let multi = [[2,3,4],[4,9,16]]
console.log(multi[0][0])
console.log(multi[0][1])
console.log(multi[0][2])
console.log(multi[1][0])
console.log(multi[1][1])
console.log(multi[1][2])
2
3
4
4
9
16
4.2. 将数组传递给函数
将数组作为参数传递给函数时,必须指定不带括号的数组名称(对数组的引用)。
示例代码
执行上面示例代码,得到以下结果:let rainbow = new Array["Violet", "Indigo", "Blue", "Green", "Yellow", "Orange", "Red"];
function show(rainbow) {
for(let i = 0;i<rainbow.length;i++) {
console.log(rainbow[i])
}
}
show(rainbow)
Violet
Indigo
Blue
Green
Yellow
Orange
Red
4.3.从函数返回数组
函数可以返回数组:
执行上面示例代码,得到以下结果:function show() {
return new Array("Blue", "Red", "Green", "Yellow")
}
let colors = show()
for(let i in colors) {
console.log(colors[i])
}
Blue
Red
Green
Yellow
Shell
5. 数组方法
ES6中引入了一些新的数组方法,例如:Array.of()
,Array.from()
等。
ES6中引入的数组方法列表如下:
编号 | 方法 | 描述 | JavaScript版本 |
---|---|---|---|
1 | Array.from() |
它将类似数组的值和可迭代的值转换为数组。 | ECMAScript 6 |
2 | Array.of() |
它从可变数量的参数(而不是参数数量或参数类型)创建实例。 | ECMAScript 6 |
3 | Array.prototype.copyWithin() |
它将数组的一部分复制到同一数组中的其他位置。 | ECMAScript 6 |
4 | Array.prototype.find() |
它根据传递给此方法的特定条件从数组中找到一个值。 | ECMAScript 6 |
5 | Array.prototype.findIndex() |
返回满足给定条件的给定数组的第一个元素的索引。 ECMAScript 6 | |
6 | Array.prototype.entries() |
它返回一个数组迭代器对象,该对象可用于遍历数组的键和值。 | ECMAScript 6 |
7 | Array.prototype.keys() |
它返回一个数组迭代器对象以及该数组的键。 | ECMAScript 6 |
8 | Array.prototype.values() |
它返回所有键对应的值。 | ECMAScript 6 |
9 | Array.prototype.fill() |
它用静态值填充指定的数组元素。 | ECMAScript 6 |
5.1. Array.from()方法
此方法的一般是用于从类似数组的对象中启用新的数组创建。 它将类似数组的值和可迭代的值(例如set
和map
)转换为数组。
语法
Array.from(object, mapFunction, thisValue)
此函数的参数值说明如下:
object
: 始终需要此参数值。 它是要转换为数组的对象。mapFunction
: 可选的。 这是一个映射函数,用于调用数组的每个项目。thisValue
: 可选的。在执行mapFunction
时,使用类似于this
的功能。
示例代码:
let name = Array.from('Xntutor')
console.log(name)
执行上面示例代码,得到以下结果:
[
'X', 'n', 't',
'u', 't', 'o',
'r'
]
5.2. Array.of()方法
在ES5中,当在数组构造函数中传递单个数值时,它将创建该大小的数组。 Array.of()
是一种创建数组的新方法,可以修复ES5的这种行为。通过使用此方法,如果仅使用单个数字值创建数组,则它将仅使用该值创建数组,而不是创建该大小的数组。
示例
let name = Array.of(42)
console.log(name)
console.log(name.length)
执行上面示例代码,得到一些以下结果:
[ 42 ]
1
5.3. Array.prototype.copyWithin()方法
这是一种有趣的方法,已添加到ES6中的数组方法库中。此方法将数组的一部分复制到同一数组中的其他位置。它返回修改后的数组,其长度没有任何修改。
注意:此方法不会向数组中添加更多项,而只会覆盖原始数组的元素。
示例:
array.copyWithin(target, start, end);
此方法的参数说明如下:
target
:始终是必需的。它是复制元素的索引位置。start
:是可选参数。它指的是开始复制元素的索引位置。 它的默认值为0
。如果此参数的值为负,则将从头算起。end
:也是可选参数。它指的是停止复制元素的索引位置。 它的默认值是数组的长度。
示例
const num = [1,2,3,4,5,6,7,8,9,10];
const num1 = [1,2,3,4,5,6,7,8,9,10];
const num2 = [1,2,3,4,5,6,7,8,9,10];
console.log(num.copyWithin(1,3,5));
console.log(num1.copyWithin(1,3)); // 省略参数 end
console.log(num2.copyWithin(1)); // 省略参数 start 和 end
执行上面示例代码,得到以下结果:
[
1, 4, 5, 4, 5,
6, 7, 8, 9, 10
]
[
1, 4, 5, 6, 7,
8, 9, 10, 9, 10
]
[
1, 1, 2, 3, 4,
5, 6, 7, 8, 9
]
5.4. Array.prototype.find()方法
这是ES6的另一个新功能。 它根据传递给此方法的特定条件从数组中找出指定值。 它返回满足给定条件的第一个元素值。
语法
array.find(callback(currentValue, index, arr),thisValue)
方法的参数说明如下:
callback
: 它代表执行每个元素的函数。currentValue
: 必需的参数,它是当前元素的值。index
: 可选参数,它是当前元素的数组索引。arr
: 可选参数,它是find()
操作的数组。thisValue
: 可选参数,它是使用回调时使用的值。
示例代码
let arr=[5,22,19,25,34];
let result=arr.find(x=>x>20);
console.log(result);
执行上面示例代码,得到以下结果:
22
注意:ES6
find()
方法与ES5filter()
方法不相似,因为filter()
方法始终返回匹配数组(返回多个匹配项),但是find()
方法始终返回实际语句。
5.5. Array.prototype.findIndex()方法
Array.prototype.findIndex()
方法返回满足给定条件的给定数组的第一个元素的索引。 如果没有元素满足条件,则返回-1
。
语法
array.findIndex(callback(value,index,arr),thisArg)
示例代码:
let arr=[5,22,19,25,34];
let result=arr.findIndex(x=>x>20);
console.log(result)
执行上面示例代码,得到以下结果:
1
5.6. Array.prototype.entries()方法
此方法返回一个数组迭代器对象,该对象可用于遍历数组的键和值。
条目将返回一个数组数组,其中每个子数组都是[index, value]
数组。
语法
array.entries();
示例
let colours = ["Red", "Yellow", "Blue", "Black"];
let show = colours.entries();
for (i of show) {
console.log(i);
}
执行上面示例代码,得到以下结果:
[ 0, 'Red' ]
[ 1, 'Yellow' ]
[ 2, 'Blue' ]
[ 3, 'Black' ]
在上面的示例中,也可以使用传播运算符代替for...of
循环,如下示例得到相同的结果。
let colours = ["Red", "Yellow", "Blue", "Black"];
let show = colours.entries();
console.log(...show);
执行上面示例代码,得到以下结果:
[ 0, 'Red' ] [ 1, 'Yellow' ] [ 2, 'Blue' ] [ 3, 'Black' ]
5.7. Array.prototype.keys()方法
此方法的工作方式类似于Array.entries()
方法。 顾名思义,它用于返回数组迭代器对象以及数组的键。
语法
array.keys()
示例代码:
let colours = ["Red", "Yellow", "Blue", "Black"];
let show = colours.keys();
console.log(...show);
执行上面示例代码得到以下结果:
0 1 2 3
5.8. Array.prototype.values()方法
此方法类似于Array.keys()
和Array.entries()
,但它提供了每个键的值。
语法
array.values()
示例代码:
let colours = ["Red", "Yellow", "Blue", "Black"];
let show = colours.values();
console.log(...show);
执行上面示例代码,得到以下结果:
Red Yellow Blue Black
5.9. Array.prototype.fill()方法
此方法用静态值填充指定的数组元素。 该值可用于填充数组的一部分或填充整个数组。 它修改了原始数组。可以指定填充的开始和结束位置。 如果未指定,则将填充所有元素。
语法
array.fill(value, start, end)
以下是上面参数的说明:
value
: 填充数组是一个静态值,必需项。start
: 它是开始填充数组的索引。可选项,其默认值为0
。end
: 它是停止填充数组的索引。 可选项,其默认值是数组的长度。
示例代码
let colours = ["Red", "Yellow", "Blue", "Black"];
let show = colours.fill("Green",2,4);
console.log(...show);
执行上面示例代码,得到以下结果:
Red Yellow Green Green
6. 销毁分配
ES6提供了一个称为销毁分配的新功能,该功能能够从对象和数组中提取特定项目,并使用简写语法将它们放入变量中。它不仅有助于减少代码,而且可以改变代码的结构方式。这是销毁结构的过程。
销毁分配是一个JavaScript表达式,可以从数组,映射,集合以及不同变量的对象属性中提取数据。
7. 数组解构
解构是将复杂的结构分解为更简单的部分。 使用解构语法,可以从对象和数组中提取较小的片段。用于变量的赋值和声明。
解构是一种从存储在数组或对象中的数据中提取多个值的有效方法。 解构数组时,我们在分配中使用它们的位置(或索引)。
下面我们通过使用一些示例来理解数组的解构:
let arr = ["Hello", "World"]
// destructuring assignment
let [first, second] = arr;
console.log(first); // Hello
console.log(second); // World
在上面的示例中,解构分配的左侧用于定义从源变量解包所需的值。
Hello
World
下面是一个数组解构的例子。
示例代码:
let colors = ["Violet", "Indigo", "Blue", "Green", "Yellow", "Orange", "Red"];
// destructuring assignment
let[color1, color2, color3] = colors;
console.log(color1); // Violet
console.log(color2); // Indigo
console.log(color3); // Blue
执行上面示例代码,得到以下结果:
Violet
Indigo
Blue
示例
如果要从给定数组中选择随机元素,则可以在数组分解中执行以下操作:
let colors = ["Violet", "Indigo", "Blue", "Green", "Yellow", "Orange", "Red"];
// destructuring assignment
let[color1, ,color3, ,color5] = colors; //Leave space for unpick elements
console.log(color1); // Violet
console.log(color3); // Blue
console.log(color5); // Yellow
在上面的示例中,我们定义了一个名为colors
的数组,其中包含七个元素。 但是显示给定数组中的三种随机颜色,即Violet
, Blue
和 Yellow
。 这些数组元素位于位置0
、2
和4
中。
销毁期间,需要为未选择的元素留出空间,如上例所示。 否则会得到意想不到的结果。
Violet
Blue
Yellow
Shell
注意:不能使用数字进行销毁。 使用数字将引发错误,因为数字不能是变量的名称。
7.1. 数组解构和Rest运算符
通过在数组解构中使用rest运算符(…
),可以将数组的所有剩余元素放入新数组中。
下面我们通过一个例子来理解它。
let colors = ["Violet", "Indigo", "Blue", "Green", "Yellow", "Orange", "Red"];
// destructuring assignment
let [a,b,...args] = colors;
console.log(a);
console.log(b);
console.log(args);
执行上面示例代码,得到以下结果:
Violet
Indigo
[ 'Blue', 'Green', 'Yellow', 'Orange', 'Red' ]
7.2. 数组解构和默认值
如果要从数组中获取一个值,并且该值未定义,则可以为变量分配默认值。
let x, y;
[x=50, y=70] = [100];
console.log(x); // 100
console.log(y); // 70
执行上面示例代码,得到以下结果:
100
70
7.3. 交换变量
可以在一个解构表达式中交换两个变量的值。 数组解构可以轻松交换变量的值,而无需使用任何临时变量。
示例代码:
let x = 100, y = 200;
[x, y] = [y, x];
console.log(x); // 200
console.log(y); // 100
执行上面示例代码,得到以下结果:
200
100
7.4. 从函数解析返回的数组
一个函数可以返回一个数组。 但是数组解构使得从函数解析返回的数组更加简洁。
我们通过下面一个例子来理解。
function array() {
return [100, 200, 300];
}
let [x, y, z] = array();
console.log(x); // 100
console.log(y); // 200
console.log(z); // 300
在上面的示例中,我们定义了array()
函数,该函数返回包含三个元素的数组。使用数组分解将上述数组元素分解为一行代码中的特定元素:x
,y
和z
。
100
200
300
8. 数组解构
解构是将复杂的结构分解为更简单的部分。 使用解构语法,可以从对象和数组中提取较小的片段。用于变量的赋值和声明。
解构是一种从存储在数组或对象中的数据中提取多个值的有效方法。 解构数组时,我们在分配中使用它们的位置(或索引)。
下面我们通过使用一些示例来理解数组的解构:
let arr = ["Hello", "World"]
// destructuring assignment
let [first, second] = arr;
console.log(first); // Hello
console.log(second); // World
在上面的示例中,解构分配的左侧用于定义从源变量解包所需的值。
Hello
World
下面是一个数组解构的例子。
示例代码:
let colors = ["Violet", "Indigo", "Blue", "Green", "Yellow", "Orange", "Red"];
// destructuring assignment
let [color1, color2, color3] = colors;
console.log(color1); // Violet
console.log(color2); // Indigo
console.log(color3); // Blue
执行上面示例代码,得到以下结果:
Violet
Indigo
Blue
示例
如果要从给定数组中选择随机元素,则可以在数组分解中执行以下操作:
let colors = ["Violet", "Indigo", "Blue", "Green", "Yellow", "Orange", "Red"];
// destructuring assignment
let [color1, ,color3, ,color5] = colors; //Leave space for unpick elements
console.log(color1); // Violet
console.log(color3); // Blue
console.log(color5); // Yellow
在上面的示例中,我们定义了一个名为colors
的数组,其中包含七个元素。 但是显示给定数组中的三种随机颜色,即Violet
, Blue
和 Yellow
。 这些数组元素位于位置0
、2
和4
中。
销毁期间,需要为未选择的元素留出空间,如上例所示。 否则会得到意想不到的结果。
Violet
Blue
Yellow
注意:不能使用数字进行销毁。 使用数字将引发错误,因为数字不能是变量的名称。
8.1. 数组解构和Rest运算符
通过在数组解构中使用rest运算符(…
),可以将数组的所有剩余元素放入新数组中。
下面我们通过一个例子来理解它。
let colors = ["Violet", "Indigo", "Blue", "Green", "Yellow", "Orange", "Red"];
// destructuring assignment
let [a,b,...args] = colors;
console.log(a);
console.log(b);
console.log(args);
执行上面示例代码,得到以下结果:
Violet
Indigo
[ 'Blue', 'Green', 'Yellow', 'Orange', 'Red' ]
8.2. 数组解构和默认值
如果要从数组中获取一个值,并且该值未定义,则可以为变量分配默认值。
let x, y;
[x=50, y=70] = [100];
console.log(x); // 100
console.log(y); // 70
执行上面示例代码,得到以下结果:
100
70
8.3. 交换变量
可以在一个解构表达式中交换两个变量的值。 数组解构可以轻松交换变量的值,而无需使用任何临时变量。
示例代码:
let x = 100, y = 200;
[x, y] = [y, x];
console.log(x); // 200
console.log(y); // 100
执行上面示例代码,得到以下结果:
200
100
8.4. 从函数解析返回的数组
一个函数可以返回一个数组。 但是数组解构使得从函数解析返回的数组更加简洁。
我们通过下面一个例子来理解。
function array() {
return [100, 200, 300];
}
let [x, y, z] = array();
console.log(x); // 100
console.log(y); // 200
console.log(z); // 300
在上面的示例中,我们定义了array()
函数,该函数返回包含三个元素的数组。使用数组分解将上述数组元素分解为一行代码中的特定元素:x
,y
和z
。
100
200
300