数组的常用方法

73 阅读6分钟

数组基本操作案例

  • 冒泡排序

      var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
      // 下标    0  1  2  3   4  5  6  7  8
      console.log('原始数组: ', arr)
    
      for (var k = 0; k < arr.length - 1; k++) {
           console.log(`这是第 ${k + 1} 轮循环(k == ${k})`)
           for (var i = 0; i < arr.length - 1 - k; i++) {
               console.log(arr[i], arr[i + 1])
               if (arr[i] > arr[i + 1]) {
                   var temp = arr[i]
                   arr[i] = arr[i + 1]
                   arr[i + 1] = temp
               }
           }
       }
       console.log('冒泡排序结束后的arr: ', arr)
    
  • 选择排序

      var arr = [50,80,79,61,82,5,28,68,44]
      console.log(arr)
      for(var k = 0;k < arr.length; k++){
          var minIndex = k
          for(var i = k + 1;i < arr.length; i++){
              if(arr[minIndex] > arr[i]){
                  minIndex = i
              }
          }
          var temp = arr[k]
          arr[k] = arr[minIndex]
          arr[minIndex] = temp
      }
      console.log(arr)
    

数组常用方法

  • push; pop; unshift; shift;

  • reverse; sort; splice; slice; concat; join; indexOf; lastIndexOf

  • forEach; map; filter; find; findIndex; every; some; reduce;

    • 数组的方法 1~7 是能够改变原数组的方法

      1. push;
          语法: 数组.push(数据)
          作用: 向 数组末尾 添加数据
          返回值: 追加数据后, 数组最新的长度
      
      2. pop;
          语法: 数组.pop()
          作用: 删除数组的最后一项
          返回值: 删除的哪一项数据
      
      3. unshift;
          语法: 数组.unshift(数据)
          作用: 向 数组头部 添加数据
          返回值: 追加数据后, 数组最新的长度
      
      4. shift;
          语法: 数组.shift()
          作用: 删除数组头部(第一项)的数据
          返回值: 删除的哪一项数据
      
      5. reverse;
          语法: 数组.reverse()
          作用: 反转数组
          返回值: 反转后的数组
      
      6. sort;
          语法: 数组.sort(); 数组.sort(function (a, b) {retrun a - b}); 数组.sort(function (a, b) {retrun b - a})
          作用:
              不传参数
                  会将数组内所有值, 转换为字符串, 然后一位一位的对比(第一位相同,对比第二位,...)
              传参---函数 return a - b
                  会将数组内所有的值, 按照数字的 从小到大排列
              传参---函数 return b - a
                  会将数组内所有的值, 按照数字的 从大到小排列
          返回值: 
              不传参数
                  将排序后的数组返回
              传递参数
                  将排序后的数组返回
      
      7. splice;
          语法: 数组.splice(开始索引, 多少个);  数组.splice(开始索引, 多少个, 数据1, 数据2, 数据3...)
          作用: 
              不传参数: 剪切数组中的某一段数据
              传递参数: 剪切数组中的某一段数据, 将第三个参数开始, 当成新数据插入到数组内
          返回值: 截切后的数据(数组形式)
      
      
      
      8. slice;   (不会改变原数组)
          语法: 数组.slice(开始索引, 结束索引)
          参数特点: 1. 包含开始索引, 不包含结束索引(到结束索引前一位)
                   2. 参数接受负数(相当于 数组.length + 负数)
                   3. 不传结束索引     相当于写了 数组.length
                   4. 一个参数都不传   相当于复制整个数组, 或者只传递第一个参数为 0
          作用: 复制数组中的某一段数据
          返回值: 复制出来的内容
      
      
      9. concat;
          语法: 数组.concat(数据1, 数据2)
          作用: 将 参数, 合并到 指定数组内(如果参数写了数组, 那么会将数组的每一个值合并到指定数组)
          返回值: 合并后的数组
      
       10. join;
          语法: 数组.join(连接符)
              参数可以不传, 不传递默认按照 , 逗号
          作用: 通过连接符连接数组的每一个值
          返回值: 连接好的数组
      
       11. indexOf; 
          语法: 数组.indexOf(数据);   数组.indexOf(数据, 开始索引)
          作用: 在数组内寻找指定数据
          返回值: 
              1. 找到数据的时候, 返回数据第一次出现的下标
              2. 找不到的时候, 返回 -1
              
       12. lastIndexOf
          语法: 数组.lastIndexOf(数据);   数组.lastIndexOf(数据, 开始索引)
          作用: 在数组内寻找指定数据(倒叙寻找)
          返回值: 
              1. 找到数据的时候, 返回数据第一次出现的下标
              2. 找不到的时候, 返回 -1
      

数组的遍历方法

  • forEach; map; filter; find; findIndex; every; some; reduce;

        1. forEach
            语法: 数组.forEach(function(item, index, origin){})
            参数: 
                    1. 数组实际每一项的值
                    2. 数组每一项对应的下标
                    3. 原数组
            作用: 遍历数组
            返回值:   返回值是 undefined  哪怕你手写了 return 也是 undefined
    
        2. map
             语法: 数组.map(function (item, index, origin) {})
             参数: 
                    1. 数组每一项实际的值
                    2. 数组每一项实际的值对应的下标
                    3. 原数组
             作用: 映射数组
             返回值: 返回一个和原数组长度一样的数组, 返回的数组的每一个值, 取决参数的return怎么写
       
        3. filter; 
             语法: 数组.filter(function (item, index, origin) {})
             参数: 
                    1. 数组每一项实际的值
                    2. 数组每一项实际的值对应的下标
                    3. 原数组
             作用: 过滤数组
             返回值: 过滤数组后的新数组, 过滤条件取决于 参数的 return 怎么写
    
        4. find; 
            语法: 数组.find(function (item, index, origin) {})
            参数: 
                    1. 数组每一项实际的值
                    2. 数组每一项实际的值对应的下标
                    3. 原数组
             作用: 查找数据
             返回值: 在数组内找到的第一个数据(不是数组)
            
        5. findIndex;
             语法: 数组.findIndex(function (item, index, origin) {})
             参数:
                    1. 数组每一项实际的值
                    2. 数组每一项实际的值对应的下标
                    3. 原数组
            作用: 查找数据 第一次出现的 下标
            返回值: 在数组内找到的第一个数据出现的下标
       
        6. every; 
             语法: 数组.every(function(item, index, origin){})
             参数:
                    1. 数组第一项实际的值
                    2. 数组第一项实际的值对应的下标
                    3. 原数组
            作用: 判断数组内数据是否全都满足条件
            返回值: 一个布尔值
                true ---> 数组内数据全都符合条件
                false ---> 数组内起码有一个数据 不符合条件
        
        7. some;
             语法: 数组.some(function (item, index, origin) {})
             参数:
                    1. 数组每一项实际的值
                    2. 数组每一项实际的值对应的下标
                    3. 原数组
             作用: 判断数组内数据是否  有一项 满足条件的
             返回值: 一个布尔值
                true: 表示数组内至少有一项满足条件
                false: 数组内数据全都不满足条件
       
        8. reduce;
             语法: 数组.reduce(function (prve, item, index, origin) {}, init)
             reduce方法的参数: 
                    1. 如果传递第二个参数 init, 执行次数和数组长度相同
                    2. 如果不传递第二个参数 init, 默认第一值为数组第一项的值, 并且执行次数在数组长度上 减1
             参数1的函数中4个形参的含义:
                    1. 表示初始值或者数组第一项的值(具体是什么取决于是否传递 init)
                    2. 数组每一项实际的值
                    3. 数组每一项实际的值对应的下标
                    4. 原数组
             作用: 累加(叠加)
             返回值: 循环运行结束后得到的值