学习js数据结构与算法-数组(6)

79 阅读3分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。

个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。

第七天:继续了解数组

前几天写的都是es5的一些方法,现在我们来看看es6数组都有些什么方法。

可以先看看循环这方面,es6多了不少方法

  • for...of

    除了一些方法,还有就是用for...of去对数组进行循环迭代。

    const arr = [1,2,3,4,5]
    for(let i of arr) {
      console.log(i)
    }
    

    可以看到,for...of可以对数组进行循环迭代,i是每个数组的元素,所以输出的是1,2,3,4,5

  • keys

    返回包含数组所有索引的@@iterator

    for(let i of arr.keys()) {
      console.log(i)
    }
    

    这个时候的i就不是数组的元素了,它是每个元素在数组中的索引,所以上面的输出是0,1,2,3,4

  • values

    返回包含数组中所有值的@@iterator

    for(let i of arr.values()) {
      console.log(i)
    }
    

    其实这个和默认的for...of是一样的,这个时候的i也是数组的所有元素,所以和前面的输出一样,是每个元素的值1,2,3,4,5

  • entries

    返回包含数组所有键值对的@@iterator

    for(let i of arr.entries()) {
      console.log(i)
    }
    

    这个时候的i就不是单独的一个元素了,这个时候的i是一个数组,里面有两个元素,第一个是每个元素的键,第二个是每个元素的值,所以最后输出的是这样的

    [0, 1] [1, 2] [2, 3] [3, 4] [4, 5]

    其实大家通常都会这样使用

    for(let [key,value] of arr.entries()) {
      console.log(key,value)
    }
    

    那没有这个的时候呢?我们是如何获取数组的键值对呢?

    应该大部分人都是这么去获取吧

    for(let i in arr) {
      console.log('key:',i,'value:',arr[i])
    }
    

    这样也是可以获取到数组的键值对的

  • from

    根据已有数组创建一个新数组,并不会改变原数组

    const result = Array.from(arr, x => (x % 2 == 0));
    

    上面会创建一个新的数组result,里面的值偶数为true,基数为false,所以上面的输出是[false, true, false, true, false],感觉这个和map有点像,平时基本都用的是map,也没怎么用这个from

    但其实它的主要功能不是上面这种操作,而是将一个类数组转为真正的数组

    // ES5的写法
    var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
    // ES6的写法
    let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
    
  • of

    根据传入的参数创建一个新数组

    const result = Array.of(1, 2, 3, 4, 5);
    

    上面会创建一个新的数组,result就是[1,2,3,4,5],当然,我们也可以复制已有的数组

    const result2 = Array.of(...result);
    

    这个result2和result页是一模一样的,这个和Array.from(result)一样。of的作用可以用来代替new Array()