冒泡排序、数组的方法

96 阅读7分钟

冒泡排序

小----->大(对比数组前一项和后一项 前一项大,就往后挪)

 // 2. 冒泡排序
        for (var k = 0; k < arr.length - 1; k++) {
            for (var i = 0; i < arr.length - 1 - k; i++) {
                if (arr[i] < arr[i + 1]) {
                    var temp = arr[i]
                    arr[i] = arr[i + 1]
                    arr[i + 1] = temp
                }
            }
        }
        console.log('冒泡排序结束后的arr: ', arr)
​

案例

  // 1.
        var obj = { name: 'Jack' }
        function fn() {
            obj.name = 'Rose'   // 修改的 全局的 obj, 全局obj 被修改为 {name:'rose'}
            obj = {}    // 修改全局的 obj, 给一个新的空对象
            obj.name = 'Jerry'  // 修改全局的 obj, 给新对象添加一个 name属性 对应的值 jerry
            console.log(obj.name)   // Jerry
        }
        fn()
        console.log(obj.name)   // Jerry
​
​
​
var obj = { name: 'Jack' }
        function fn() {
            // obj.name = 'Rose'   // 此时 obj 因为变量提升只提升定义, 所以为 undefined , 所以这里报错
            var obj = {}
            obj.name = 'Jerry'
            console.log(obj.name)   // Jerry
        }
        fn()
        console.log(obj.name)   // Jack

选择排序

 /**
         * 选择排序
        */
        var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
        // 下标    0  1  2  3  4  5  6  7  8
        console.log('原始数组arr: ', arr)
​
        /**
         *          第几次循环   假设谁是最小值     和谁交换    循环开始的值
         *  k == 0      1               0           0               1
         *  k == 1      2               1           1               2
         *  k == 2      3               2           2               3
         *  
        */
​
        for (var k = 0; k < arr.length; k++) {
            var minIndex = k    // 假设当前最小数值 为 下标 0 的项
            for (var i = k + 1; i < arr.length; i++) {
                if (arr[minIndex] > arr[i]) {
                    minIndex = i
                }
            }
            // 交换 真实最小的值  与 下标 0 的值
            var temp = arr[k]
            arr[k] = arr[minIndex]
            arr[minIndex] = temp
        }
        console.log('选择排序结束后的 arr: ', arr)

数组的方法1

能改变原数组的方法:

  • push

  • 语法:数组.push(数据)

  • 作用:向数组末尾添加数据

  • 返回值:追加数据后,数组最新的长度

  • var arr = [1, 2, 3, 500]
           console.log('原始数组: ', arr)
     
           1. push
           var num = arr.push(500)
           console.log(arr)
           console.log(num)
    
  • pop

  • 语法:数组.pop( )

  • 作用:删除数组的最后一项

  • 返回值:删除的那一项数据

  • var arr = [1, 2, 3, 500]
          console.log('原始数组: ', arr)
    2. pop
            var num = arr.pop()
            console.log(arr)    // ---> [1, 2, 3]
            console.log(num)    // ---> 500
  • unshift

  • 语法:数组.unshift(数据)

  • 作用:向数组头部添加数据

  • 返回值:追加数据后,数组的最新长度

  • var arr = [1, 2, 3, 500]
          console.log('原始数组: ', arr)
    3. unshift
          var num = arr.unshift(1000)
          console.log(arr)
          console.log(num)
    
  • shift

  • 语法:数组.shift( )

  • 作用:删除数组头部(第一项)的数据

  • 返回值:删除的哪一项数据

  • var arr = [1, 2, 3, 500]
           console.log('原始数组: ', arr)
    4. shift
            var num = arr.shift()
            console.log(arr)
            console.log(num)
    
  • reverse

  • 语法:数组.reverse( )

  • 作用:反转数组

  • 返回值:反转后的数组

  • var arr = [1, 2, 3, 500]
            console.log('原始数组: ', arr)
    5. reverse
            var num = arr.reverse()
            console.log('反转后的数组: ', arr)
            console.log('reverse的返回值: ', num)
    
  • sort

  • 语法:数组.sort( )

  • 数组.sort(function(a,b){retrun a - b})-------从小到大排序

  • 数组.sort(function(a,b){retrun b - a})-------从大到小排序

  • var arr = [1, 2, 3, 500]
           console.log('原始数组: ', arr)
    6. sort
            6.1 不传参数
            var num = arr.sort()
            console.log('sort后的 arr: ', arr)
            console.log('sort 的返回值: ', num)
    
    var arr = [1, 2, 3, 500]
            console.log('原始数组: ', arr)
    6.2 return a - b
            var num = arr.sort(function (a, b) { return a - b })
            console.log('sort后的 arr: ', arr)
            console.log('sort 的返回值: ', num)
    
    var arr = [1, 2, 3, 500]
            console.log('原始数组: ', arr)
    6.3 return b - a
            var num = arr.sort(function (a, b) { return b - a })
            console.log('sort后的 arr: ', arr)
            console.log('sort 的返回值: ', num)
    ​
    
  • splice

  • 语法:数组.splice(开始索引下标,多少个)

  • 语法:数组.splice(开始索引下标,多少个,数据1,数据2.....)------剪切数组中的某一段数据,将第三个参数开始,当成新数据插入到数组内

  • 返回值:剪切后的数据(数组形式)

  • var arr = [1, 2, 3, 500]
           console.log('原始数组: ', arr)
    7. splice
            7.1 不传参数
            var num = arr.splice(1, 3)
            console.log('splice 后的 arr: ', arr)
            console.log('splice 的 返回值: ', num)
    ​
    
     var arr = [1, 2, 3, 500]
            console.log('原始数组: ', arr)
    7.2 传递参数
            var num = arr.splice(1, 3, '数据1', '数据2', '数据3', '数据4')
            console.log('splice 后的 arr: ', arr)
            console.log('splice 的 返回值: ', num)
    

不会改变原数组的方法:

  • slice

  • 语法:数组.slice(开始索引,结束索引)

  • 参数特点:包含开始索引,不包含结束索引(到结束索引前一位);参数接受负数(相当于数组.length+负数);不传结束索引相当于写了数组.length; 一个参数都不传相当于复制整个数组,或者只传递第一个参数为0

  • 作用:复制数组中的某一段数据

  • 返回值:复制出来的内容

  • var arr = [100, 1, 101, 3, 2, 102]
           // 下标     0   1   2   3  4   5
           console.log('原始数组: ', arr)
     
    8. slice
            8.1 正常传参
            var num = arr.slice(1, 5)
            console.log('slice 后的 arr: ', arr)
            console.log('slice 的返回值: ', num)
            
    
    var arr = [100, 1, 101, 3, 2, 102]
            // 下标     0   1   2   3  4   5
            console.log('原始数组: ', arr)
    ​
    8.2 传递负数
            var num = arr.slice(1, -1)  // arr.length + (-1)    ---> 6 + (-1)   ---> 6 - 1 ---> 5
            console.log('slice 后的 arr: ', arr)
            console.log('slice 的返回值: ', num)
    
     var arr = [100, 1, 101, 3, 2, 102]
            // 下标     0   1   2   3  4   5
            console.log('原始数组: ', arr)
    ​
    8.3 不传结束索引     相当于写了 数组.length
            var num = arr.slice(2)
            console.log('slice 后的 arr: ', arr)
            console.log('slice 的返回值: ', num)
    
     var arr = [100, 1, 101, 3, 2, 102]
            // 下标     0   1   2   3  4   5
            console.log('原始数组: ', arr)
    ​
    // 8.4 一个参数都不传   相当于复制整个数组, 或者只传递第一个参数为 0
            var num = arr.slice()
            console.log('slice 后的 arr: ', arr)
            console.log('slice 的返回值: ', num)
    

数组的方法2

  • concat

  • 语法:数组.concat(数据1,数据2)

  • 作用:将参数合并到指定数组内(如果参数写到了数组,那么会将数组的每一个值合并到指定数组)

  • 返回值:合并后的数组

  • var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4]
          // 下标     0  1  2   3  4  5  6  7   8
          console.log('原始数组: ', arr)
      
          // 9. concat
          var num = arr.concat(100, 200, 'QF', 'haha', [600, 700, 800])
          console.log('concat 后的 arr: ', arr)
          console.log('concat 的返回值: ', num)
      
    
  • join

  • 语法:数组.join(连接符)

  • 参数可以不传,不传递默认按照逗号

  • 作用:通过连接符连接数组的每一个值

  • 返回值:连接好的数组

  • var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4]
         // 下标     0  1  2   3  4  5  6  7   8
         console.log('原始数组: ', arr)
         
     
         // 10. join
         // 10.1 传递参数
         var num = arr.join('|')
         console.log('join 后的 arr: ', arr)
         console.log('join 的返回值: ', num)
    
      var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4]
            // 下标     0  1  2   3  4  5  6  7   8
            console.log('原始数组: ', arr)
     
     // 10.2 不传参数
            var num = arr.join()
            console.log('join 后的 arr: ', arr)
            console.log('join 的返回值: ', num)
    ​
    
  • indexOf

  • 语法:数组.indexOf(数据)

  • 语法:数组.indexOf(数据,开始索引)

  • 作用:在数组内寻找指定数据

  • 返回值:找到数据的时候,返回数据第一次出现的下标;没有找到数据的时候,返回 -1

         var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4]
            // 下标     0  1  2   3  4  5  6  7   8
            console.log('原始数组: ', arr)
        
        // 11. indexOf
            var num = arr.indexOf(4, 5)
            console.log('indexOf 后的 arr: ', arr)
            console.log('indexOf 的返回值: ', num)
    
  • lastIndexOf

  • 语法:数组.lastIndexOf(数据)

  • 语法:数组.lastIndexOf(数据,开始索引)

  • 作用:在数组内寻找指定数据(倒叙寻找)

  • 返回值:找到数据的时候,返回数据第一次出现的下标;找不到的时候,返回 -1

 var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4]
        // 下标     0  1  2   3  4  5  6  7   8
        console.log('原始数组: ', arr)
​
// 12. lastIndexOf
        var num = arr.lastIndexOf(4, 4)
        console.log('lastIndexOf 后的 arr: ', arr)
        console.log('lastIndexOf 的返回值: ', num)
        

数组的方法3

数组的遍历方法:

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