开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
书接上回,看过文档用法及详细介绍传送门 会发现,关于关于数组提供的方法还是挺多的 , 而在上一小节提到方法如果给个分类的话应该属于
ECMAScript 2015(ES6 或 ES2015)和更新的规范(2015+)给 JavaScript 语言带来了新的功能
今天 要学习几个 ECMAScript 6 和数组的新功能 ,不必多说,先上菜谱
ECMAScript 6 和数组的新功能
| 方法 | 描述 |
|---|---|
| @@iterator | 返回一个包含数组键值对的迭代器对象,可以通过同步调用得到数组元素的键值对 |
| copyWithin | 复制数组中一系列元素到同一数组指定的起始位置 |
| entries | 返回包含数组所有键值对的@@iterator |
| includes | 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素 |
| findIndex | 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素在数组中的索引 |
| fill | 用静态值填充数组 |
| from | 根据已有数组创建一个新数组 |
| keys | 返回包含数组所有索引的@@iterator |
| of | 根据传入的参数创建一个新数组 |
| values | 返回包含数组中所有值的@@iterator |
使用for...of循环迭代
继for循环和forEach方法迭代数组后,要想迭代数组的值还可以用for...of循环
食用方法:
// for...of循环示例
let array = [1, 2, 3]
for (let key of array) {
console.log(key);
}
/*
输出:
1
2
3
*/
可以看到:使用for...of循环迭代整个数组还是比较方便的,key可以根据个人口味自定义,方便取到值并且使用,示例所示并非仅可以迭代数组,for...of详细指南 本人能想到的,都是可以遍历到,但是有一个问题是:
怎么拿到当前项的下标(索引)?
直接多给个参数?不行,key的位置只能容得下一个参数,装不下其他参数了;
不用了总行吧?可以,但,有问题要解决问题,方法是有滴
for...of获取当前项索引:
array.keys():
方法返回一个包含数组中每个索引键的 Array Iterator 对象
let array = [10, 20, 30]
for (let key of array.keys()) {
console.log(key);
}
/*
输出:
0
1
2
*/
感受: 确实是获取到了下标,但就一个下标让人有点难办,或是有什么妙用,目前本人还未知(比较菜)
array.entries():
返回一个新的数组迭代器对象,该对象包含数组中每个索引的键/值对
let array = [10, 20, 30]
for (let key of array.entries()) {
console.log(key);
}
/*
输出:
[ 0, 10 ]
[ 1, 20 ]
[ 2, 30 ]
*/
感受: for循环表示我来我也行,直接就
确实,遍历上面示例类似的数组还是站在for循环这边的,因为这里我想到一个问题:
再看以下描述:entries()返回一个新的数组迭代器对象,该对象包含数组中每个索引的键/值对
这是不是意味着需要先对array迭代一遍,事先处理好数据(一维数组-->二维数组)得到一个新的数组,然后都这个新的数组进行迭代,最终得到示例的结果
也就是说:
for循环: 迭代一遍数组,可以同时的带下标和值
for..of+entries(): 共迭代两遍数组,同时生成了一个新的数组
后者的时间复杂度系数相对前者来说翻了一倍,但指数未变化,然后按照复杂度分析可以忽略系数的影响,一倍的系数变化近似于没有变化,所以问题不大,可放心食用(瞎猜的,出问题概不负责)
辅助变量获取索引:
外部创建一个变量,类似于i=0,每次迭代递增,这也是下意识想到的解决办法,虽不优雅,但能跑😁
let i = 0;
let array = [10, 20, 30]
for (let key of array) {
console.log(i, key);
i++;
}
/*
输出:
0 10
1 20
2 30
*/
values()取值
此为插播内容
方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。
思考:为什么要返回一个新的对象,应用于何处,为何不直接迭代取值???
那位道友知道,可否告知🥹