ES6(ECMAScript 2015)为数组(Array)引入了一些新的扩展和特性,这些扩展使得数组操作变得更加简洁和强大。以下是一些主要的新增扩展:
-
扩展运算符(Spread Operator)
...
:- 可以在函数调用/数组构造时,将数组元素或者可迭代对象的元素展开。
- 示例:
let arr1 = [1, 2, 3]; let arr2 = [...arr1, 4, 5]; // arr2 现在是 [1, 2, 3, 4, 5]
- 也可以用于对象字面量,进行对象的浅拷贝。
-
Array.from():
- 创建一个新的数组实例,从一个可迭代对象或者类数组对象。
- 示例:
let arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3}; let arr = Array.from(arrayLike); // arr 现在是 ['a', 'b', 'c']
-
Array.of():
- 创建一个新的数组实例,使用可变数量的参数,而不管参数的数量或类型。
- 示例:
let arr = Array.of(1, 2, 3); // arr 现在是 [1, 2, 3]
这与直接使用数组字面量
[1, 2, 3]
是相同的,但Array.of()
允许你在没有字面量语法时创建数组。 -
find() 和 findIndex():
find()
方法返回数组中满足提供的测试函数的第一个元素的值。findIndex()
方法返回数组中满足提供的测试函数的第一个元素的索引。- 示例:
let arr = [1, 2, 3, 4, 5]; let found = arr.find(element => element > 3); // found 现在是 4 let index = arr.findIndex(element => element > 3); // index 现在是 3
-
fill():
- 用一个静态值填充一个数组从起始索引到结束索引(不包括结束索引)的所有元素。
- 示例:
let arr = [1, 2, 3, 4, 5]; arr.fill(0, 2, 4); // arr 现在是 [1, 2, 0, 0, 5]
-
entries(), keys(), 和 values():
- 这三个方法都返回一个新的数组迭代器对象,它包含数组中每个索引的键/值对。
keys()
返回键的迭代器。values()
返回值的迭代器。entries()
返回键/值对的迭代器。- 示例:
let arr = ['a', 'b', 'c']; for (let pair of arr.entries()) { console.log(pair); // 输出类似 [0, 'a'], [1, 'b'], [2, 'c'] 的数组 }
-
copyWithin():
- 在当前数组内部,将指定范围的元素浅拷贝到另一个指定位置,并返回这个数组。
- 示例:
let arr = [1, 2, 3, 4, 5]; arr.copyWithin(0, 3, 4); // arr 现在是 [4, 2, 3, 4, 5]
这些新特性为数组操作提供了更多的灵活性和便捷性。
当然,除了之前提到的扩展之外,ES6还为数组提供了其他一些有用的新增方法和特性:
-
includes():
- 用来判断一个数组是否包含一个指定的值,根据情况,如果需要,会搜索整个数组。如果找到,则返回
true
;否则返回false
。 - 示例:
let arr = [1, 2, 3, 4, 5]; let includesResult = arr.includes(3); // includesResult 现在是 true let includesResult2 = arr.includes(6); // includesResult2 现在是 false
- 用来判断一个数组是否包含一个指定的值,根据情况,如果需要,会搜索整个数组。如果找到,则返回
-
flat() 和 flatMap():
flat()
方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。flatMap()
方法首先使用映射函数映射每个元素,然后将结果展平为一个新数组。它等同于对数组使用map()
方法,然后再使用flat()
方法,但flatMap()
通常比使用这两个方法更有效率。- 示例:
let arr = [1, 2, [3, 4, [5, 6]]]; let flatResult = arr.flat(2); // flatResult 现在是 [1, 2, 3, 4, 5, 6] let numbers = [1, 2, 3, 4]; let flatMapResult = numbers.flatMap(x => [x, x * 2]); // flatMapResult 现在是 [1, 2, 2, 4, 3, 6, 4, 8]
-
排序稳定性(Sort Stability):
- 在ES6中,数组的
sort()
方法被要求为稳定排序。这意味着如果数组中有两个相等的元素,那么它们的原始顺序在排序后会被保留。 - 示例:
let arr = [20, 1, 100, 1, 2, 1]; arr.sort((a, b) => a - b); // arr 现在是 [1, 1, 2, 100, 20],相等的元素保留了它们的原始顺序
- 在ES6中,数组的
-
数组的空位(Array Holes):
- 在ES6中,数组可以包含空位(holes),即稀疏数组。空位就是那些被显式赋予
undefined
的元素,或者从未被赋值的元素。然而,大部分数组方法都会忽略这些空位,只处理实际存在的元素。
- 在ES6中,数组可以包含空位(holes),即稀疏数组。空位就是那些被显式赋予
请注意,尽管这些方法和特性在ES6中被引入,但它们在不同的JavaScript引擎中的实现可能会有所不同,因此在某些旧版本的浏览器或环境中可能无法使用。在开发时,请确保你的目标环境支持这些特性,或者提供必要的降级方案。