JavaScript数据结构【数组02】

52 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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
*/

感受: 确实是获取到了下标,但就一个下标让人有点难办,或是有什么妙用,目前本人还未知(比较菜)

更多关于数组中keys防范介绍


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(): 共迭代两遍数组,同时生成了一个新的数组

后者的时间复杂度系数相对前者来说翻了一倍,但指数未变化,然后按照复杂度分析可以忽略系数的影响,一倍的系数变化近似于没有变化,所以问题不大,可放心食用(瞎猜的,出问题概不负责)

更多关于数组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 对象,该对象包含数组每个索引的值。

思考:为什么要返回一个新的对象,应用于何处,为何不直接迭代取值???

那位道友知道,可否告知🥹

更多关于数组values的介绍