ES6 数组
使用变量来存储值会带来以下限制
- 变量本质上是标量的。换句话说,变量声明一次只能包含一个变量。这意味着要在程序中存储n个值,需要n个变量声明。因此,当需要存储更大的值集时,变量的使用是不可行的。
- 程序中的变量按随机顺序分配内存,因此难以按照声明的顺序检索/读取值。
JavaScript引入了数组的概念来解决这个问题。
一个数组是一个齐次的值集合。为了简化,数组是相同数据类型的值的集合。它是用户定义的类型。
数组的特征
- 数组声明分配连续的内存块。
- 数组是静态的。这意味着一个初始化的数组无法调整大小。
- 每个内存块表示一个数组元素。
- 数组元素由一个称为元素的下标/索引的唯一整数标识。
- 数组也像变量一样,应该在使用之前声明。
- 数组初始化是指填充数组元素。
- 数组元素值可以更新或修改,但不能删除。
声明和初始化数组
要在JavaScript中声明和初始化数组,请使用以下语法 -
var array_name; //declaration array_name = [val1,val2,valn..] //initialization OR var array_name = [val1,val2…valn]
注意 - 这一对[]被称为数组的维数。
例如,如下所示的声明:var numlist = [2,4,6,8]
将创建一个数组,如下图所示。
访问数组元素
数组名称后跟下标用于引用数组元素。以下是相同的语法。
array_name[subscript]
示例:简单数组
var alphas; alphas = ["1","2","3","4"] console.log(alphas[0]); console.log(alphas[1]);
在成功执行上述代码时,会显示以下输出。
1 2
示例:单个语句声明和初始化
var nums = [1,2,3,3] console.log(nums[0]); console.log(nums[1]); console.log(nums[2]); console.log(nums[3]);
在成功执行上述代码时,会显示以下输出。
1 2 3 3
数组对象
数组也可以使用Array对象创建。数组构造函数可以作为 -
- 表示数组或大小的数字值。
- 逗号分隔值列表。
以下示例使用此方法创建一个数组。
示例
var arr_names = new Array(4) for(var i = 0;i<arr_names.length;i++) { arr_names[i] = i * 2 console.log(arr_names[i]) }
在成功执行上述代码时,会显示以下输出。
0 2 4 6
示例:数组构造函数接受逗号分隔的值
var names = new Array("Mary","Tom","Jack","Jill") for(var i = 0;i<names.length;i++) { console.log(names[i]) }
在成功执行上述代码时,会显示以下输出。
Mary Tom Jack Jill
数组方法
以下是Array对象的方法列表及其描述。
序号 | 方法 & 描述 |
---|---|
1 | concat()
返回由此数组与其他数组和/或值组成的新数组。 |
2 | every()
如果此数组中的每个元素均满足提供的测试函数,则返回true。 |
3 | filter()
用提供的过滤函数返回true的此数组的所有元素创建一个新数组。 |
4 | forEach()
为数组中的每个元素调用一个函数。 |
5 | indexOf()
返回数组中等于指定值的元素的第一个(最少)索引,如果没有找到,则返回-1。 |
6 | join()
将数组的所有元素连接到一个字符串中。 |
7 | lastIndexOf()
返回数组中等于指定值的元素的最后(最大)索引,如果没有找到,则返回-1。 |
8 | map()
使用在此数组中的每个元素上调用提供的函数的结果创建一个新数组。 |
9 | pop()
从数组中删除最后一个元素并返回该元素。 |
10 | push()
将一个或多个元素添加到数组的末尾并返回数组的新长度。 |
11 | reduce()
同时对数组的两个值(从左到右)同时应用一个函数,以将其减少为单个值。 |
12 | reduceRight()
同时对数组的两个值(从右到左)同时应用一个函数,以将其减少为单个值。 |
13 | reverse()
颠倒数组元素的顺序 - 第一个变为最后一个,最后一个变为第一个。 |
14 | shift()
从数组中移除第一个元素并返回该元素片。 |
15 | slice()
提取数组的一部分并返回一个新数组。 |
16 | some()
如果此数组中至少有一个元素满足提供的测试函数,则返回true。 |
17 |
toSource() 表示对象的源代码。 |
18 | sort()
对数组的元素进行排序。 |
19 | splice()
添加和/或从数组中移除元素。 |
20 | toString()
返回表示数组及其元素的字符串。 |
21 | unshift()
将一个或多个元素添加到数组的前面并返回数组的新长度。 |
ES6 - 数组方法
以下是ES6中引入的一些新阵列方法。
Array.prototype.find
find可以让你迭代一个数组并获取第一个返回的元素,使给定的回调函数返回true。一旦找到一个元素,函数立即返回。这是一种有效的方法,可以只获得与给定条件匹配的第一个项目。
实例
var numbers = [1, 2, 3]; var oddNumber = numbers.find((x) => x % 2 == 1); console.log(oddNumber); // 1
在成功执行上述代码时,会显示以下输出。
1
注意 - ES5 filter()和ES6 find()不是同义词。过滤器总是返回一个匹配数组(并且会返回多个匹配),查找总是返回实际的元素。
Array.prototype.findIndex
findIndex的行为类似于find,但不是返回匹配的元素,而是返回该元素的索引。
var numbers = [1, 2, 3]; var oddNumber = numbers.findIndex((x) => x % 2 == 1); console.log(oddNumber); // 0
以上示例将返回值1(0)的索引作为输出。
Array.prototype.entries
entries是一个函数,它返回一个Array Iterator,它可以用来遍历数组的键和值。条目将返回一个数组数组,其中每个子数组都是[index,value]的数组。
var numbers = [1, 2, 3]; var val = numbers.entries(); console.log(val.next().value); console.log(val.next().value); console.log(val.next().value);
在成功执行上述代码时,会显示以下输出。
[0,1] [1.2] [2,3]
或者,我们也可以使用spread运算符一次返回一组条目。
var numbers = [1, 2, 3]; var val= numbers.entries(); console.log([...val]);
在成功执行上述代码时,会显示以下输出。
[[0,1],[1,2],[2,3]]
Array.from
Array.from()允许从对象等数组中创建一个新数组。Array.from()的基本功能是将两种值转换为数组 -
- 类似数组的值。
- Set和Map等Iterable值。
实例
"use strict" for (let i of Array.from('hello')) { console.log(i) }
在成功执行上述代码时,会显示以下输出。
h e l l o
Array.prototype.keys()
该函数返回数组索引。
示例
console.log(Array.from(['a', 'b'].keys()))
在成功执行上述代码时,会显示以下输出。
[ 0, 1 ]
使用for ... in循环的数组遍历
可以使用for ... in循环来遍历数组。
"use strict" var nums = [1001,1002,1003,1004] for(let j in nums) { console.log(nums[j]) }
循环执行基于索引的数组遍历。在成功执行上述代码时,会显示以下输出。
1001 1002 1003 1004
JavaScript中的数组
JavaScript支持关于数组的以下概念 -
序号 | 概念 & 描述 |
---|---|
1 | 多维数组
JavaScript支持多维数组。多维数组的最简单形式是二维数组 |
2 | 将数组传递给函数
您可以通过指定数组的名称而不使用索引来传递指向数组的指针。 |
3 | 从函数返回数组
允许一个函数返回一个数组。 |
数组解构
JavaScript支持在数组上下文中进行分解。
示例
var arr = [12,13] var[x,y] = arr console.log(x) console.log(y)
在成功执行上述代码时,会显示以下输出。
12 13
下一章:ES6 日期
Date对象是内置于JavaScript语言中的数据类型。日期对象是使用新的Date()创建的,如以下语法所示。一旦创建了一个Date对象,许多方法都允许您对它进行操作。大多数方法只允许您使用本地时间或UTC(通用或GMT)时 ...