读书笔记--《学习JavaScript数据结构》(一)

本文为读书笔记系列之一——《学习JavaScript数据结构》
之前在up主蜡笔与小勋那里了解到一些快速阅读的方法:
将文章中你觉得有用的文字或段落记录下来,然后写你的读书感受,这样才能更快更好地读好一本书,把一本厚厚的资料读薄。以后看看自己记录的笔记,很快就能回忆起其他的内容(联想记忆)。希望我坚持下来吧,ヾ(◍°∇°◍)ノ゙

数组笔记

  1. 数组插入到最后可以用push

    1
    2
    numbers.push(-2);
    numbers.push(-4,-3);
  2. 数组插入到第一个可以用unshift:

    1
    2
    numbers.unshift(-2);
    numbers.unshift(-4,-3);
  3. 删除数组最末尾元素:pop

    1
    numbers.pop();
  4. 删除第一个元素

    1
    numbers.shift();
  5. 在任意位置添加或删除元素:splice

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    numbers.splice(5,3);
    //删除从数组索引5开始的3个元素,下标5-7都已删除

    numbers.splice(5,0,2,3,4);
    //从数组索引5开始插入值2,3,4

    //splice方法接受的第一个参数,表示想要删除或插入的元素的索引值,第一个参数是删除的个数(不删除传入0),第三个参数往后就是需要加入数组的值(可以声明展开的方法传入数组)

    numbers.splice(5,3,2,3,4);
    //从索引5开始删除了3个元素,也从5开始添加了元素2、3、4

  6. 常用数组的方法:

    • concat:连接2个或更多的数组,并返回结果
    • every:遍历数组,如果该函数对每个元素都返回true,则返回true
    • filter:遍历数组,返回该函数会返回true元素组成的数组
    • forEach:遍历数组
    • join:所有数组元素连接成一个字符串
    • indexOf:返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1
    • lastIndexOf:返回在数组中搜索到的与给定参数相等的元素的索引里最大的值
    • map:遍历,返回每次函数调用的结果组成的数组
    • reverse:倒置
    • slice:传入索引值,将数组里对应索引范围内的元素作为新数组返回
    • some:遍历,若任意元素返回true,则返回true
    • sort:排序
    • toString:数组作为字符串返回
    • valueOf:和toString类似
  7. 迭代器函数
    map、filter和reduce是JavaScript函数式编程的基础。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    let numbers = [1,2,3,4,5,6];

    const isEven = x => x % 2 === 0;

    //1. every方法

    numbers.every(isEven); //false
    //因为第一个元素是1,直接就返回false

    //2. some方法
    numbers.some(isEven);//true
    //迭代数组,直到函数返回true。先迭代1,然后返回false,第二个是2,是偶数,返回true,迭代结束。

    //3. forEach方法
    numbers.forEach(x=>console.log(x%2===0)); //返回和for循环结果相同

    //4. map和filter方法
    const myMap = numbers.map(isEven);
    //mpMap=[false,true,false,true,false,true];

    const evenNumbers=numbers.filter(isEven);
    //evenNumbers=[2,4,6]

    //5.reducer方法

    numbers.reduce((previous,current)=>previous+current);//累加器,输出21

    //reduce方法接收一个有如下四个参数的函数:previousValue、currentValue、index和array。后两个可选,这个函数会返回一个将被叠加到累加器的值,reduce方法停止执行后会返回这个累加器。

  8. ES6 和数组的新功能
    ES2015和ES2016新增的数组方法:

    • @@iterator:返回一个包含数组键值对的迭代器对象,可以通过同步调用得到数组元素的键值对;
    • copyWithin:复制数组中一系列元素到同一数组指定的起始位置
    • entries:返回包含数组所有键值对的@@iterator
    • includes:如果数组中存在某个元素则返回true,否则返回false
    • find:根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素
    • findIndex:同上,找到返回索引
    • fill:用静态值填充数组
    • from:根据已有数组创建一个新数组
    • keys:返回包函数组所有索引的@@iterator
    • of:根据传入的参数创建一个新数组
    • values:返回包含数组中所有值的@@iterator
  9. 使用for…of循环迭代

    1
    2
    3
    for (const n of numbers) {
    console.log(n%2 ===0 ? 'even' : 'odd');
    }
  10. 使用@@iterator对象

    1
    2
    3
    4
    5
    6
    7
    let iterator = numbers[Symbol.iterator]();
    console.log(iterator.next().value);

    for (const n of iterator) {
    console.log(n);
    }
    数组中所有值都迭代完之后,iterator.next().value会返回undefined
  11. 数组中的entries、keys和values方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let aEntries = numbers.entries();//得到键值对的迭代器
    console.log(aEntries.next().value);//[0,1] - 位置0的值为1
    console.log(aEntries.next().value);//[1,2] - 位置1的值为2
    console.log(aEntries.next().value);//[2,3] - 位置2的值为3

    numbers数组中都是数,key是数组中的位置,value是保存在数组索引的值

    aEntries=numbers.entries();
    for (const n of aEntries) {
    console.log(n);
    }

    使用集合、字典、散列表等数据结构中,能取出键值对很有用的

keys方法返回包含数组索引的@@iterator

1
2
3
4
const aKeys = numbers.keys();//得到数组索引的迭代器
console.log(aKeys.next());//{value: 0, done: false }
console.log(aKeys.next());//{value: 1, done: false }
console.log(aKeys.next());//{value: 2, done: false }

keys方法会返回numbers数组的索引。一旦没有可迭代的值,aKeys.next()就会返回一个value属性为undefined、done属性为true的对象。如果done属性的值为false,就意味着还有可迭代的值。

values方法返回的@@iterator则包含数组的值。使用这个方法的代码示例如下。

1
2
3
4
const aValues = numbers.values();
console.log(aValues.next());//{values: 1, done: false}
console.log(aValues.next());//{values: 2, done: false}
console.log(aValues.next());//{values: 3, done: false}
  1. 使用from方法
    复制number数组:

    1
    let numbers2=Array.form(numbers);

    还可以穿入一个用来过滤值的函数

    1
    let evens=Array.form(numbers, x => (x%2==0));

    会创建一个evens数组,以及值true(偶数)或false(奇数)。

  2. 使用Array.of方法

    1
    2
    3
    4
    5
    let numbers3 = Array.of(1);
    let numbers4 = Array.of(1,2,3,4,5,6);

    let numbers3=[1];
    let numbersCopy = Array.of(...numbers4);
  3. 使用fill方法用静态值填充数组

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2022 Tangent1231
  • 访问人数: | 浏览次数:

给棉花买点猫粮吧~

支付宝
微信