在javascript中,数组是最重要的数据结构,没有之一,因为所有的数据结构都可以使用数组模拟和表达。
- 新增数组创建方法
(1)Array.from()
作用: 把类数组(获取一组元素、arguments...) 对象转成数组
个人观点: 具备 length这个东西,就靠谱
Array.from的设计目的是快速便捷把一个类似数组的可迭代对象创建成一个新的数组实例。
返回新的数组,而不改变原对象。
(2)Array.of():
作用:把一组值,转成数组
let arr = Array.of('apple','banana','orange');
console.log(arr);
注:
Array.of 将参数依次转化为数组中的一项,然后返回这个新数组,不管这个参数是数字还是其它什么。
Array.of 总是返回参数值组成的数组。如果没有参数,就返回一个空数组。
- 新增数组修改方法
1. copyWithin()
使用该方法会修改当前数组;
可以在当前数组内部,将指定位置的数组项复制到其他位置,会覆盖原数组项,然后返回当前数组;
它接受三个参数:
(1)target(必需):从该位置开始替换数据。如果为负值,表示倒数。
(2)start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。
(3)end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
2.fill(填充的东西,开始位置,结束位置不含此位置)
使用给定值,填充一个数组。
[1,2,3,4,5].fill('a');
// ["a", "a", "a", "a", "a"]
new Array(3).fill(12)
// [12, 12, 12]
可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
注意,如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝对象。
-新增数组查找遍历方法
1.arr.find()
查找,找出第一个符合条件的数组成员,如果没有找到,返回undefined
2. arr.findIndex():
找的是位置, 没找到返回-1
3.includes()
包不包含
返回一个布尔值,表示某个数组是否包含给定的值,与字符串的 includes 方法类似;
includes 第二个参数表示搜索的起始位置
如果第二个参数为负数,则表示从倒数第几位向后搜索
4.entries、keys、values
它们都返回一个遍历器对象,都可以用 for...of 循环进行遍历。
唯一的区别是 keys 是对键名的遍历、 values 是对键值的遍历, entries 是对键值对的遍历。
for (let index of ['a', 'b', 'c'].keys()) {
console.log(index);
}
// 0
// 1
// 2
for (let elem of ['a', 'b', 'c'].values()) {
console.log(elem);
}
// 'a'
// 'b'
// 'c'
for (let [index, elem] of ['a', 'b', 'c'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
// 2 "c"
- 数组降维方法
1.flat(num/Infinity)
flat用于将嵌套的数组“拉平”“拍平”。该方法返回一个新数组,对原数据没有影响。
参数表示嵌套层数。
2.flatMap()
方法对原数组的每个成员执行一个函数(相当于执行 Array.prototype.map),然后对返回值组成的数组执行 flat() 方法。
该方法返回一个新数组,不改变原数组。
注意:flatMap() 只能展开一层数组。
总结
数组新增的方法,一方面起到了增强型作用,一方面让代码变得更加简洁。
其中 Array.from 和 Array.of 属于构造函数方法。
从是否改变数组自身的角度看:
copyWithin、fill 会改变数组自身,
includes、flat、flatMap不会改变数组自身。
entries、keys、values、find、findeIndex属于数组遍历方法。