ES6学习笔记 —— 数组
一、数组扩展创建
1. Array.from
方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map),可以接受第二个参数,用来对每个元素进行处理,将处理后的值放入返回的数组。
2. Array.of
方法用于将一组值,转换为数组,弥补数组构造函数Array()
的不足。
3. Array
方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于2个时,Array()
才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度
Array.from([1, 2, 3]) 等同于 Array.of(1, 2, 3)
二、查找
find():用于找出第一个符合条件的数组元素。
findIndex:返回第一个符合条件的数组元素的位置,如果所有元素都不符合条件,则返回 -1 。
let List = [1,2,3,4] List.find(item=>item>3) //4 List.findIndex(item=>item>3) //3 let arr = [ {id:1,name:'AAA'}, {id:2,name:'BBB'}, {id:3,name:'CCC'}, {id:4,name:'DDD'} ] arr.find(item=>item.id==1) //{id:1,name:'AAA'} arr.findIndex(item=>item.id==1) //0
三、填充
fill():将一定范围索引的数组元素内容填充为单个指定的值。
copyWithin():将一定范围索引的数组元素修改为此数组另一指定范围索引的元素。
[1,2,3,4].fill(0,1,2) // [1, 0, 3, 4] [1, 2, 3, 4, 5].copyWithin(0, 3, 4) // 将3号位复制到0号位, [4, 2, 3, 4, 5]
四、遍历数组
keys() :对键名的遍历
values(): 对键值的遍历
entries(): 对键值对的遍历
for (let index of ['a', 'b'].keys()) { console.log(index); } // 0 // 1
for (let elem of ['a', 'b'].values()) { console.log(elem); } // 'a' // 'b'
for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); } // 0 "a" // 1 "b"
五、包含
includes():数组是否包含指定值。
注意:与 Set 和 Map 的 has 方法区分;Set 的 has 方法用于查找值;Map 的 has 方法用于查找键名。
- Map 结构的 has 方法,是用来查找键名的,比如 Map.prototype.has(key) 、 WeakMap.prototype.has(key) 、 Reflect.has(target, propertyKey) 。
- Set 结构的 has 方法,是用来查找值的,比如 Set.prototype.has(value) 、 WeakSet.prototype.has(value) 。
// 参数1:包含的指定值 [1, 2, 3].includes(1); // true // 参数2:可选,搜索的起始索引,默认为0 [1, 2, 3].includes(1, 2); // false // NaN 的包含判断 [1, NaN, 3].includes(NaN); // true
六、数组扁平化
flat():
方法将子数组的成员取出来,添加在原来的位置,flat() 方法的参数写成一个整数,表示想要拉平的层数,默认为1。
flatMap():
方法对原数组的每个成员执行一个函数(相当于执行 Array.prototype.map() ),然后对返回值组成的数组执行 flat() 方法。该方法返回一个新数组,不改变原数组。
[1, 2, [3, [4, 5]]].flat() // [1, 2, 3, [4, 5]] [1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5] [1, [2, [3]]].flat(Infinity) //不管有多少层嵌套,都要转成一维数组 [1, 2, 3] [1, 2, , 4, 5].flat() // 跳过空位 [1, 2, 4, 5] // 相当于 [[2, 4], [3, 6], [4, 8]].flat() [2, 3, 4].flatMap((x) => [x, x * 2]) // [2, 4, 3, 6, 4, 8] // 相当于 [[[2]], [[4]], [[6]], [[8]]].flat() [1, 2, 3, 4].flatMap(x => [[x * 2]]) // [[2], [4], [6], [8]]
七、合并数组
[...[1, 2],...[3, 4]] //[1, 2, 3, 4]
八、复制数组
let arr = [1, 2] let arr1 = [...arr] // [1, 2] // 数组含空位 let arr2 = [1, , 3] let arr3 = [...arr2] // [1, undefined, 3]