数组方法的总结

453 阅读9分钟

数组方法总结

  // ==============Tips================
   let arr = ['LY', 'DHN', 'ZHY', 'CTY', 'MJJ'];
   // // 有时候这样打印不直观
   console.log(arr); // ["LY", "DHN", "ZHY", "CTY", "MJJ"]
   // 可以用这个 会打印一个表格哦
   console.table(arr);

1. push() 数组后面压入元素

 /**
   * 1. push() 数组后面压入元素
   * 可以压入多个哦
   * 返回值为数组的长度
   * 影响原数组
   * */
  
  let arr = [1, 2, 3, 4];
  let result = arr.push(5, 6);
  console.log(arr); // [1, 2, 3, 4, 5, 6]
  console.log(result); // 6
  

2.pop() 数组后面移出元素

/**
   * 2.pop() 数组后面移出元素
   * 不接受参数
   * 返回值为移除的元素
   * 影响原数组
   * */

  let arr = [1, 2, 3, 4];
  let result = arr.pop()
  console.log(arr); //  [1, 2, 3]
  console.log(result); // 4
 

3.unshift() 数组前面压入元素

 /**
    * 3.unshift() 数组前面压入元素
    * 可以压入多个哦
    * 返回值为数组长度
    * 影响原数组
    * */

  let arr = [1, 2, 3, 4];
  let result = arr.unshift(-1, 0)
  console.log(arr); //   [-1, 0, 1, 2, 3, 4]
  console.log(result); // 6
  

4.shift() 数组前面移出元素

/**
     * 4.shift() 数组前面移出元素
     * 不接受参数
     * 返回值为移除的元素
     * 影响原数组
     * */

  let arr = [1, 2, 3, 4];
  let result = arr.shift()
  console.log(arr); //  [2, 3, 4]
  console.log(result); // 1

5.splice() 集移除与添加的功能的缝合怪

/**
     * 5.splice() 集移除与添加的功能的缝合怪
     * 参数1:开始截取的位置
     * 参数2:截取到什么地方 不包括当前位
     * 参数3+n:之后的参数是要添加什么
     * 返回值为截取的数组
     * 改变原数组
     * */

  let arr = [1, 2, 3, 4];
  // 解释一下 从索引0开始截取 截取2位 然后伤口处添加 521 520
  let result = arr.splice(0, 2, 521, 520);
  console.log(arr);
  

6.concat() 合并数组

/**
      * 6.concat() 合并数组
      * 参数为要合并的数组 可以合并多个哦
      * 不影响原数组
      * 返回值为合并后的新数组 总是返回一个新数组
      * 注意:可以以值为参数
      * */
  let arr1 = [1, 2, 3, 4];
  let arr2 = [5, 6, 7, 8, 9];
  let result = arr1.concat(arr2);
  console.log(arr1); // [1, 2, 3, 4]
  console.log(arr2); // [5, 6, 7, 8, 9]
  console.log(result); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
  

7.slice() 裁剪数组

 /**
   * 7.slice() 裁剪数组
   * 类似与 splice 区别不改变原数组
   * 参数1:开始截取的位置
   * 参数2:截取到什么位置
   * 返回截取的元素
   * 不改变原数组
   * */

  let arr = [1, 2, 3, 4];
  let result = arr.slice(0, 2)
  console.log(arr); // [1, 2, 3, 4]
  console.log(result); // [1, 2]

8.reverse() 反转数组


  let arr = ['你', '是', '我', '年', '少', '的', '欢', '喜'];
  let result = arr.reverse()
  console.log(arr); // ["喜", "欢", "的", "少", "年", "我", "是", "你"]
  console.log(result); // ["喜", "欢", "的", "少", "年", "我", "是", "你"]
  console.log(result === arr); // true
  

9.sort() 数组排序

/**
   * 9.sort() 数组排序
   * 假如没有传递对比函数==>里面的元素会调用自己原型上的 toString()变成字符串然后对比ASCII码
   * 参数接收一个排序函数
   * 参数1:下一个要对比的值
   * 参数2:上一次对比的值
   * 改变原数组
   * 返回值为原数组
   * */

  let arr = [4, 2, 1, 5, 3, 6, 9, 8, 7];
  let result = arr.sort((a, b) => {
    // console.log(a, b);
    // 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    // 若 a 等于 b,则返回 0。
    // 若 a 大于 b,则返回一个大于 0 的值。

    // 一句话 当返回一个大于0的值的时候就交换位置
    return a - b // 升序 降序反过来咯
  })
  console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
  console.log(result); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
  console.log(arr === result); // true
  

10.indexOf() 查找元素在数组中的位置 从前往后

/**
     * 10.indexOf() 查找元素在数组中的位置 从前往后
     * 找到了返回下标
     * 找不到返回-1
     * 接收第二个参数 开始查找的位置 并且可以写负值 从后面往前面数索引 然后从该位置往后找
     * 注意:和找对象一样 只找一个
     * */

  let arr = [1, 2, 3, 4];
  let result1 = arr.indexOf(3);
  let result2 = arr.indexOf(521);
  let result3 = arr.indexOf(3, 3);
  console.log(result1); // 2
  console.log(result2); // -1
  console.log(result3); // -1
  

11.lastIndexOf() 查找元素在数组中的位置 从后往前

 /**
     * 11.lastIndexOf() 查找元素在数组中的位置 从后往前
     * 找到了返回下标
     * 找不到返回-1
     * 接收第二个参数 开始查找的位置 并且可以写负值 从后面往前面数索引 然后从该位置往前找
     * 注意:和找对象一样 只找一个
     * */

  let arr = [1, 2, 3, 4];
  let result1 = arr.lastIndexOf(3);
  let result2 = arr.lastIndexOf(521);
  let result3 = arr.lastIndexOf(3, -2); // 从3开始往前面找3发现自己就是 数组从后开始没有			  索引0这一说
  console.log(result1); // 2
  console.log(result2); // -1
  console.log(result3); // 2
  

12.includes() 查找数组中有没有该元素

 /**
   * ES6+
   * 12.includes() 查找数组中有没有该元素
   * 返回值为布尔值 找到了为true 找不到为false
   * */

  let arr = [1, 2, 3, 4];
  let result1 = arr.includes(3)
  let result2 = arr.includes(521)
  console.log(result1); // true
  console.log(result2); // false
  

13.find() 查找数组有没有符合条件的元素

 /**
     * ES6+
     * 13.find() 查找数组有没有符合条件的元素
     * 就近返回 找到了就不找了
     * 找到了返回该元素
     * */

  let arr = [1, 2, 3, 4];
  let result = arr.find((item, index, arr) => {
    // console.log(item); // 数组中的每一个元素
    // console.log(index); // 数组元素索引
    // console.log(arr); // 数组本身
    return item > 1
  })
  console.log(result); // 2 

  

14.findIndex() 查找又没有满足条件的元素

/**
   * ES6+
   * 14.findIndex() 查找又没有满足条件的元素
   * 就近返回 找到了就不找了
   * 返回该元素在数组的下标
   * */

  let arr = [1, 2, 3, 4];
  let result = arr.findIndex((item, index, arr) => {
    //   // console.log(item); // 数组中的每一个元素
    //   // console.log(index); // 数组元素索引
    //   // console.log(arr); // 数组本身
    return item > 1
  })
  console.log(result); // 1
  

15.flat() 拉平数组 其实就是把多维数组变成一维数组 降维打击

/**
   * ES6+
   * 15.flat() 拉平数组 其实就是把多维数组变成一维数组 降维打击
   * 返回值为拉平后的新数组
   * 默认拉平2维数组
   * 可以传递参数拉平三维数组
   * */

  let arr = [[1, 2], [3, 4, [5]]];
  let result1 = arr.flat();
  // 可以发现默认参数为2可以拉平二维数组
  console.log(result1); // [1, 2, 3, 4,[5]]
  // 拉平一个三维数组要传递参数为3 简单记忆拉平多少维度就传什么
  let result2 = arr.flat(3);
  console.log(result2); // [1, 2, 3, 4, 5]
  

16.fill() 填充一个数组

 /**
    * 16.fill() 填充一个数组
    * 用什么填满数组 用爱啊
    * 返回原数组
    * 改变原数组
    * */

  let arr = [1, 2, 3, 4];
  let result = arr.fill('LOVE U');
  console.log(arr); // ["LOVE U", "LOVE U", "LOVE U", "LOVE U"]
  console.log(result); //  ["LOVE U", "LOVE U", "LOVE U", "LOVE U"]
  console.log(arr === result); true
	

17.Array.from() 去伪存真 把伪数组变成真数组

 /**
    * 17.Array.from() 去伪存真 把伪数组变成真数组
    * */

  let fakeArr = {
    "0": "1",
    "1": "2",
    "2": "3",
    "3": "4",
    length: 4
  }
  let result = Array.from(fakeArr);
  console.log(result); //  ["1", "2", "3", "4"]
  console.log(result instanceof Array); // true 变成真数组了
  

18.Array.of() 创建数组的方式 为了弥补 new Array()的不足

 /**
    * 18.Array.of() 创建数组的方式 为了弥补 new Array()的不足
    */

  let arr = Array.of(521);
  console.log(arr); // [521] 用new Array() 会出现一个长度为521的值为empty的数组
  

19.join() 把数组的元素以一个分割符连接成字符串

  let arr = ['荣', '耀', '不', '是', '一', '个', '人', '的', '游', '戏'];
  let result = arr.join('')
  console.log(result); // 荣耀不是一个人的游戏
  

20.forEach() 简简单单的迭代 其实下面的迭代都可以基于forEach实现

 /**
    * 20.forEach() 简简单单的迭代 其实下面的迭代都可以基于forEach实现
    * item 数组的每一项 ===>第一个参数
    * index 数组每一项的下标===> 第二个参数
    * arr 数组本身 ====> 第三个参数
    * */

  let arr = ['风', '花', '雪', '月'];
  arr.forEach((item, index, arr) => {
    // 1.简单的迭代
    // 2.没有返回值 默认为undefined
    // 3.return 打断不了迭代 或者说只可以打断一次循环
    console.log(`${item}-----${index}-----${arr}`);
  })
  

21.reduce() 汇总 进去一堆出一个结果

/**
    * 21.reduce() 汇总  进去一堆出一个结果
    * 这个是和其他的不一样的 这个接收4个参数
    * total ---> 上一次运算的结果===>第一个参数 必须的!
    * currentValue ---> 当前的值===>第二个参数 必须的!
    * currentIndex ---> 当前值的下标 ===>第三个参数 可选的
    * arr ---> 数组本身 ====>第四个参数 可选的
    * 此函数的返回值是你处理之后得到的结果 所以叫汇总
    * 可以通过第二个参数给它一个开始累加的初始值
    * */

  let arr = [1, 2, 3, 4];
  let result1 = arr.reduce((total, currentValue, currentIndex, arr) => {
    return total += currentValue;
  },0)
  console.log(result1) // 10
  // 求数组和简化写法
  let result2 = arr.reduce((a, b) => a + b);
  console.log(result2) // 10
  

22.filter() 过滤

 /**
    * 22.filter() 过滤
    * item 数组的每一项 ===>第一个参数
    * index 数组每一项的下标===> 第二个参数
    * arr 数组本身 ====> 第三个参数
    * 返回值是一个新数组 其实就是满足条件的元素组成的一个❤的数组
    * */

  let arr = [90, 100, 60, 30, 20, 70, 80, 10];
  let result1 = arr.filter((item, index, arr) => {
    // 过滤掉小于60的数字
    return item >= 60;
  })
  console.log(result1); // [90, 100, 60, 70, 80]
  // 简写方式 // 过滤掉小于60的数字
  let result2 = arr.filter(item => item >= 60);
  console.log(result2); // [90, 100, 60, 70, 80]
  

23.map() 映射

/**
    * 23.map() 映射
    * 简单来说 map 和 forEach 是差不多的
    * item 数组的每一项 ===>第一个参数
    * index 数组每一项的下标===> 第二个参数
    * arr 数组本身 ====> 第三个参数
    * 区别:这个有返回值==>每一次迭代之后的返回值组成的❤数组
    * */

  let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  let result1 = arr.map((item, index, arr) => {
    // 数组中每一个值加1之后的❤数组
    return ++item;
  })
  console.log(result1); // [2, 3, 4, 5, 6, 7, 8, 9, 10]
  // 简化写法
  let result2 = arr.map(item => ++item);
  

24.every() 每一个都满足条件就返回true 只要有一个不满足条件就返回false1. push() 数组后面压入元素

  let arr = [10, 20, 30, 40];
  let result1 = arr.every((item, index, arr) => {
    // 数组中的每一项都大于10吗?全部满足才返回true 而且这个方法会短路
    return item >= 10;
  })
  console.log(result1); // 都满足条件所以是true
  // ========================================================
  let result2 = arr.every((item, index, arr) => {
    console.log(1); // 可以发现只打印了一次1所以只要碰到一个不满足条件的直接返回false不继续迭代
    // 数组中的每一项都大于20吗?全部满足才返回true 10就是不满足的所以直接返回false
    return item >= 20;
  })
  console.log(result2); // 10就不满足条件了所以为false

  // 简化写法
  let result3 = arr.every(item => item >= 10);
  console.log(result3); // true
  

25.some() 和 every() 相反

 /** 
   * 25.some() 和 every() 相反
   * item 数组的每一项 ===>第一个参数
   * index 数组每一项的下标===> 第二个参数
   * arr 数组本身 ====> 第三个参数
   * 返回值是一个布尔值 只要有一个满足条件的就返回true 全部不满足条件才返回false
   **/

  let arr = [10, 20, 30, 520];
  let result1 = arr.some((item, index, arr) => {
    // 数组中有大于100的吗?520大于100所以为true
    return item > 100;
  })
  console.log(result1); // true
  // =================================================
  let result2 = arr.some((item, index, arr) => {
    // 数组中有大于1的吗?第一个值10就大于1所以到这里就结束迭代 找到满足条件的就停止迭代
    // console.log(1); 只会打印一次
    return item > 1;
  })
  console.log(result2); // true
  // ==============================================
  let result3 = arr.some((item, index, arr) => {
    // 数组中有大于1000的吗?没有符合条件了所以返回false
    return item > 1000;
  })
  console.log(result3); // false

  // 简化写法
  let result4 = arr.some(item => item > 10);
  console.log(result4); // true
  

26.Array.isArray() 用于判断是不是Array类型 Yes or NO

 /**
    * ES6+
    * 26.Array.isArray() 用于判断是不是Array类型 Yes or NO
    * 返回布尔值
    * 是Array就是true
    * 不是Array就是false
   * */

   let arr = ['我是不是Array呀'];
   let result1 = Array.isArray(arr);
   let obj = { name: 'LY_Glimmer' };
   let result2 = Array.isArray(obj);
   console.log(result1);// true
   console.log(result2); // false

  // !!!!!!==> keys、values、entries,它们使用数组方式的话,返回的是Iterator遍历器对象 这个以后在讨论
  

欢迎小伙伴帮我补充