初识js--数组(六)

294 阅读10分钟

数组

  • 什么是数组
    • 数组是存放一些数据的集合,也是引用数据类型(复杂数据类型
    • 引用数据类型:数组、对象、函数
    • 简单来说我们把数据放到一个盒子中, 这个盒子就是数组, 注意数组内的数据是有顺序的,但是数据的类型没有限制,但是在开发的时候一般需要将一个数组内的数据类型限制为一个
      比如:纯字符串数组、纯数字数组、纯对象数组
  • 数组和对象将来如何选择?
    • 示例:
      商品的详情存放到某一个对象中,比如: 商品名, 商品价格,商品折扣,商品描述......
      商品列表假设有100个商品,那么你就有100个商品详情,按照上述的封装,那么你有100个对象,我们可以将这100个对象,存放到某个数组中,进行维护管理...

一、创建数组

1、字面量的方式创建(使用场景最多的方式)

    var arr1 = [] //创建了一个空数组
    console.log(arr1) //[]

2、内置构造函数的方式创建

    var arr2 = new Array() //创建一个空数组
    console.log(arr2) //[]
    
    //创建一个长度为5的数组
    var arr3 = new Array(5)
    console.log(arr3)//(5)[empty*5]
    
    //创建一个有内容的数组
    var arr4 = new Array(100,200,300,'why','new','bee')
    console.log(arr4)//[100,200,300,'why','new','bee']

二、数组的长度

  • 数组的长度并不固定,取决于数组内部有多少个元素
  • 查看方式
    1、打印数据,在控制台展开数组,找到最后的length
    2、打印 数组名.length
  • 当数组的长度 === 0 ,代表当前数组为空数组
  • 当数组为空数组的时候,做某些操作
    if(arr.length === 0){
    `xxxxxxxx
}
    var arr=[1,2,3,4,5]
    console.log(arr)//[1,2,3,4,5]
    console.log(arr.length)//5

三、数组的索引(下标)

  • 有什么用?表明数组的这个位置上有什么内容
  • 注意:
    下标是固定的,永远是0 1 2 3 4 5 ...但是下标对应的内容不是固定的
    var arr=[1,2,3,4,5]
    //下标: 0 1 2 3 4
    
    console.log(arr)
    console.log(arr[0])//会得到当前数组下标0这个位置上的值--1
    
    //通过数组的下标,我们也可以修改数组中某一个元素的内容
    arr[2] = '新数据'
    
    console.log('修改后的数组:',arr)//[1,2,'新数据',4,5]

四、数组遍历

1、需求:拿到数组各个位置上的值

    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        for (var i = 0; i < arr.length; i++) {
            console.log(arr[i])
        }

2、课上练习:

1)找出数组中的最大值

     var arr = [34, 65, 76, 50, 12, 24]
        var max = arr[0]
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i]
            }
        }
        console.log(`最大值是${max}`)

2)计算数组中所有内容相加的和

     var arr = [34, 65, 76, 50, 12, 24]
        var sum = 0
        for (var i = 0; i < arr.length; i++) {
            sum += arr[i]
        }
        console.log(`数组内容和为${sum}`)

3)封装一个函数,名为includes

  • 功能:传入一个数组和数字,判断这个数组中是否包含这个数字;包含返回true,否则false
      function includes(arr, num) {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] === num) {
                    return true
                }
            }
            return false
        }
        var res = includes([12, 23, 34, 45, 56, 67], 23)
        console.log(res)

4)封装一个函数,名为indexOf

  • 功能:传入一个数组和数字,判断这个数组中是否包含这个数字,包含返回这个数字的下标(从左到右第一个)否则返回-1
      function indexOf(arr, num) {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] === num) {
                    return i
                }
            }
            return -1
        }

        var res = indexOf([12, 67, 23, 34, 45, 56, 67], 675)
        console.log(res)

5)封装一个函数,名为indexOf

  • 功能:书写一个函数 LastIndexof 功能和 indexof 相同,但是查的顺序为 从右到左.
      function lastIndexOf(arr, num) {
            for (var i = arr.length - 1; i >= 0; i--) {
                if (arr[i] === num) {
                    return i
                }
            }
            return -1
        }

        var res = lastIndexOf([12, 67, 23, 34, 45, 56, 12, 67], 67)
        console.log(res)

注意:声明式定义函数,可以在函数定义前调用

五、冒泡排序

1、基础版

    var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1]
    // 冒泡排序 (基础版, 没有优化)
        for (var j = 0; j < arr.length; j++) {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] > arr[i + 1]) {
                    var temp = arr[i]
                    arr[i] = arr[i + 1]
                    arr[i + 1] = temp
                }
            }
            console.log('第 ', j + 1, ' 轮冒泡排序后: ', arr)
        }

2、优化版

     var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1]
     for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    var temp = arr[j]
                    arr[j] = arr[j + 1]
                    arr[j + 1] = temp
                }
            }
        }
        console.log(arr)

3、整个优化过程

     /**
         *  优化 1: 外层循环可以减少一次
         * 
         *      一共 9 个数字, 所以需要执行 9 次 冒泡
         * 
         *      但是前 8 次执行完毕后, 就剩下一个位置和一个数字 没有验证了
         * 
         *      所以没必要执行最后一次了, 因为没有多的位置
        */
        // for (var j = 0; j < arr.length - 1; j++) {
        //     for (var i = 0; i < arr.length; i++) {
        //         if (arr[i] > arr[i + 1]) {
        //             var temp = arr[i]
        //             arr[i] = arr[i + 1]
        //             arr[i + 1] = temp
        //         }
        //     }
        // }
        // console.log('冒泡排序后: ', arr)
        
        
        
        //优化2:内层循环 - 1
        // for (var j = 0; j < arr.length - 1; j++) {
        //     for (var i = 0; i < arr.length - 1; i++) {
        //         /**
        //          *  当前 数组 arr.length === 9
        //          * 
        //          *  那也就是说 i 最大 为 8
        //          * 
        //          *  所以最后一轮循环 i === 8
        //          * 
        //          *  判断的内容为 arr[i] > arr[i + 1]
        //          *              arr[8] > arr[9]
        //          * 
        //          *  所以最后一次 判断没有意义, 所以我们此时应该让 内层循环 - 1
        //         */
        //         if (arr[i] > arr[i + 1]) {
        //             var temp = arr[i]
        //             arr[i] = arr[i + 1]
        //             arr[i + 1] = temp
        //         }
        //     }
        // }
        // console.log('冒泡排序后: ', arr)


        // 优化 3, 去掉多余的无用对比
        // for (var j = 0; j < arr.length - 1; j++) {
        //     console.log('当前是第 ', j + 1, ' 次循环, 此时变量 j ===', j)
        //     for (var i = 0; i < arr.length - 1 - j; 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('==========================================================')
        // }
        // console.log('冒泡排序后: ', arr)

六、选择排序

1、优化版

   
        var arr = [76, 45, 65, 23, 12, 98]
        for (var i = 0; i < arr.length - 1; i++) {
            var minIndex = i
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[minIndex] > arr[j]) {
                    minIndex = j
                }
            }
            var temp = arr[i]
            arr[i] = arr[minIndex]
            arr[minIndex] = temp
        }
        console.log(arr) 

2、选择排序过程

     /**
         * 选择排序
        */
        var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
        //         0  1  2  3  4  5  6  7  8


        /**
         *                  第几次循环      假设谁是最小值      和谁交换        内层循环从 ? 开始
         * 
         *      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++) {
            // 1. 假设 k 是最小值的下标, 保存在 minIndex
            var minIndex = k
            // 2. 循环会帮我们找到真实最小值的下标, 并保存在变量 minIndex
            for (var i = k + 1; i < arr.length; i++) {
                if (arr[minIndex] > arr[i]) {
                    minIndex = i
                }
            }
            // 3. 交换 真实最小值(下标 minIndex) 和 假设最小值 (k) 的位置
            var temp = arr[k]
            arr[k] = arr[minIndex]
            arr[minIndex] = temp
        }

        console.log('排序后: ', arr)



        // 假设这是我们第 11111111111111111111111111111 轮 选择排序
        // 1. 假设 下标0 是最小的值
        // var minIndex = 0
        // // 2. 循环遍历数组, 找到真实最小的值对应的下标
        // for (var i = 1; i < arr.length; i++) {
        //     if (arr[minIndex] > arr[i]) {
        //         minIndex = i
        //     }
        // }
        // // 上述循环执行完毕后, 我们一定会得到最小值对应的下标
        // // console.log(minIndex)
        // // 3. 将 真实最小值(下标minIndex)和假设最小值(下标0)做一个交换
        // var temp = arr[0]
        // arr[0] = arr[minIndex]
        // arr[minIndex] = temp
        // console.log('第 11111111111111111111111111111 轮 选择排序后: ', arr)


        // // 假设这是我们第 22222222222222222222222222222222 轮 选择排序
        // // 1. 假设 下标1 是最小的值 (因为 第一轮结束后, 下标0 真的是最小值)
        // var minIndex = 1
        // // 2. 循环遍历数组, 找到真实最小的值对应的下标
        // for (var i = 2; i < arr.length; i++) {
        //     if (arr[minIndex] > arr[i]) {
        //         minIndex = i
        //     }
        // }
        // // 上述循环执行完毕后, 我们一定会得到最小值对应的下标
        // // console.log(minIndex)
        // // 3. 将 真实最小值(下标minIndex)和假设最小值(下标1)做一个交换
        // var temp = arr[1]
        // arr[1] = arr[minIndex]
        // arr[minIndex] = temp
        // console.log('第 22222222222222222222222222222222 轮 选择排序后: ', arr)

        // // 假设这是我们第 333333333333333333333333333333333333333 轮 选择排序
        // // 1. 假设 下标2 是最小的值 (因为 前两轮结束后, 下标0 和 下标1 真的是最小值)
        // var minIndex = 2
        // // 2. 循环遍历数组, 找到真实最小的值对应的下标
        // for (var i = 3; i < arr.length; i++) {
        //     if (arr[minIndex] > arr[i]) {
        //         minIndex = i
        //     }
        // }
        // // 上述循环执行完毕后, 我们一定会得到最小值对应的下标
        // // console.log(minIndex)
        // // 3. 将 真实最小值(下标minIndex)和假设最小值(下标2)做一个交换
        // var temp = arr[2]
        // arr[2] = arr[minIndex]
        // arr[minIndex] = temp
        // console.log('第 333333333333333333333333333333333333333 轮 选择排序后: ', arr)

七、数组方法

1、push

  • 语法:数组名.push(数据)
  • 作用:向数组末尾新增一条数据
  • 返回值:新增数据后最新的数组长度
    var arr = [1, 2, 3]
    
    //数组名.push(数据)
    var len = arr.push(100)
    console.log(arr)//[1,2,3,100]
    console.log('返回值:', len)//4
    
    
    //自己封装一个push函数
    //作用:向数组末尾 新增一条数据
    function push(push_arr,data) {
        //向数组末尾新增一个data
        push_arr[push_arr.legth] = data
        
        return push_arr.length
    }
    push(arr,100)
    push(arr,'why')
    push(arr,true)
    console.log(arr)

注意:在函数传参的过程中,如果实参的值是一个引用数据类型,然后在函数内部对这个形参做了一些修改,那么会影响到函数外边的原数据。

2、pop

  • 语法:数组名.pop()
  • 作用:删除数组末尾最后一个数据
  • 返回值:被删除的数据
    var arr = [1, 2, 3]
    
    //arr.pop()  //这种写法比较常见,返回值一般不用
    var res = arr.pop()
    console.log(arr, '返回值:', res)//[1,2]  3
    
    
    //自己封装一个pop函数
    //作用:删除数组末尾最后一个数据
    //返回值:被删除的数据
    
    var arr = [1, 2, 3]
    function pop(pop_arr) {
    
        //先将数组末尾的数据保存,用于删除后返回
        var len = pop_arr[pop_arr.length-1]
        
        //1、删除 数组末尾最后一个数据
        //delete pop_arr[pop_arr.length-1]//人没了
        pop_arr.length -= 1//位置和人都没了
        
        //2、返回被删除的数据
        return len
    }
    var res = pop(arr)
    console.log('函数执行完毕后的数组:', arr)
    console.log('函数执行完毕后的返回值:', res)

3、unshift

  • 语法:数组.unshift(数据)
  • 作用:向数组开头,添加一个数据
  • 返回值:新增数据后的数组长度
    var arr = [1, 2, 3]
    var len = arr.unshift('新的数据')
    console.log(arr, len)//['新的数据', 1, 2, 3]   4

1)自己封装一个unshift函数(原数组不变)

    //自己封装一个unshift函数
    var arr = [1, 2, 3]
    function unshift(unshift_arr,data) {
        //逻辑:1、创建一个新的数组,然后将这个数组开头放上我们执行要         //添加的数据在2、将原本数组后续的内容,放在新数组的后边
        
        //1、创建一个新的数组,然后将这个数组开头放上新加的数据
        var arr2 = [data]
        //2、将原本数组后续的内容,放在新数组的后边
        for(var i = 0; i < unshift_arr.length; i++){
            arr2[i+1] = unshift_arr[i]
        }
        return {
            arr:arr2,
            len:arr2.length
        }
    }
    var res = unshift(arr, 'newData')
    console.log(res)
    console.log(res.arr)
    console.log(res.len)

2)自己封装一个unshift函数(原数组也改变)

        var arr = [1, 2, 3]
        console.log('原数组: ', arr)

        function unshift(unshift_arr, data) {
            // 1. 创建一个新的数组, 然后将这个数组开头放上我们执行要添加的数据
            var newArr = [data]

            // 2. 在将原本数组后续的内容, 放在新数组的后边
            for (var i = 0; i < unshift_arr.length; i++) {
                newArr[i + 1] = unshift_arr[i]
            }

            // console.log('函数内部得到一个我们想要的数组: ', newArr)
            // unshift_arr = newArr    // 这样写不对, 原因后续会详细讲解

            // 3. 遍历 我们想要得到的数组, 拿到每一项, 然后重新赋值给 unshift_arr
            for (var k = 0; k < newArr.length; k++) {
                unshift_arr[k] = newArr[k]
            }

            /**
             *  此时 只需要返回一个数组的最新长度即可
             *          返回 这两个数组哪一个都无所谓
             *  因为 经过 上述 三个步骤 此时两个数组 长得一模一样
             * 
             *  但是要注意, 只是长得一样, 完全不是一个数组
             * 
             *  就好比: 两个卧室装修的一模一样, 但两个房间不是同一个
            */
            // return unshift_arr.length
            return newArr.length

        }
        var res = unshift(arr, 'newData')
        console.log('函数执行完毕后的原数组: ', arr)

4、shift

  • 语法:数组.shift()
  • 作用:删除数组第一个数据
  • 返回值:被删除的数据
    var arr = [1, 2, 3]
    
    //arr.shift()  //这种写法比较常见,返回值一般不用
    var res = arr.shift()
    console.log(arr, '返回值:', res)//[2,3]  1
    
    
    //自己封装一个shift函数
    //作用:删除数组第一个数据
    //返回值:被删除的数据
    
    var arr = [1, 2, 3]
    function shift(shift_arr) {
         //1、暂存数组首位的内容,将来要返回出去
         var temp = shift_arr[0]
         
         //2、遍历数组找到数组所有内容,删除首位的内容
         for(var i = 0;i < shift_arr.length; i++) {
                shift_arr[i] = shift_arr[i+1]
             }
         /*经过上述循环后,数组中【0】的值已经被替换了,但最后            多了一个undefined,那么此时只需要删除数组末尾的值就            可*/
         shift_arr.length -= 1
         
         return temp
    }
    var res = shift(arr)
    console.log(res)

5、reverse

  • 语法:数组.reverse()
  • 作用:将数组反转
  • 返回值:反转后的数组
  • 注意:该方法能够改变原数组
        var res = arr.reverse()
        console.log(arr)//[500, 100, 400, 300, 200, 100]
        console.log(res)//[500, 100, 400, 300, 200, 100]
        
        
        
       //自己封装一个reverse函数
       //作用:反转数组
       //返回值:反转后的数组
       
       function reverse(arr) {
           //1、交换数组内部元素的位置
           for(var i=0; i <arr.length/2; i++) {
               ver temp = arr[i]
               arr[i] = arr[arr.length - 1 - i]
               arr[arr.length - 1 - i] = temp
           }
           return arr
       }
       
       var res = reverse(arr)
       console.loh(res)      

6、sort

  • 语法1:数组名.sort()
    • 作用:将数组内的数据,转换为 字符串,然后一位一位的对比
  • 语法2:数组名.sort(function(a,b) {return a - b})
    • 作用:会按照数字 从小到大排序
  • 语法3: 数组名.sort(function(a,b) {return b - a})
    • 作用:会按照数字 从大到小排序
  • 作用:将数组进行排序
  • 返回值:排序好的新数组
  • 注意:sort使用后能够修改原数组

1)语法1

    //语法1
    var arr = [1,2,3,4,5,100,300,401,404,500,1001,2023]
    console.log('原数组',arr)
    console.log('sort 的返回值',arr.sort())
    //[1, 100, 1001, 2, 2023, 3, 300, 4, 401, 404, 5, 500]
    console.log('sort方法后的数组',arr)

2)语法2

    //语法2
    var arr = [54, 65, 23, 1, 89]
    arr.sort(function(a,b) {
        return a - b
    })
    console.log(arr)//[1, 23, 54, 65, 89]

3)语法3

    //语法3
    var arr = [54, 65, 23, 1, 89]
    arr.sort(function(a,b) {
        return b - a
    })
    console.log(arr)//[89, 54, 54, 23, 1]

7、splice

  • 语法1:数组.splice(开始索引,多少个)
  • 语法2:数组.splice(开始索引,多少个,要插入的数据)
    • 开始索引:默认为0;多少个:默认为0;要插入的数据:默认是没有
  • 作用:删除数组中若干数据,并选择是否插入新的数据
  • 返回值:以新数组的形式返回被删除的数据
    var arr = [1, 2, 3, 4, 5]
    
    //语法1
    arr.splice(0,3) //从下标0开始,剪切3个
    console.log(arr) //[4,5]
    var res = arr.splic(0,3)
    console.log('剪切到的内容:', res)// [1,2,3]
    console.log('剪切后的数组', arr) //[4,5]
    
    //语法2
    arr.splice(0,3,'新的数据',true,undefined) //从下标0开始,剪切3个
    console.log(arr) //['新的数据',true,undefined,4,5]
    var res = arr.splic(0,3,'新的数据',true,undefined)
    console.log('剪切到的内容:', res)// [1,2,3]
    console.log('剪切后的数组', arr) //[新的数据',true,undefined,4,5]
    

使用哪些方法会改变原数组以上七种!

8、indexOf

  • 语法1:数组.indexOf(数据)
  • 语法2:数组.indexOf(数据,从哪个下标开始(第二个参数不传,默认为0))
  • 作用:按照从左到右的顺序,查找数组中是否包含这个数据
  • 返回值:找到了,返回从左到右第一次出现的下标;否则返回-1
    var arr = [1,2,3,4,1,2,3]
    //         0 1 2 3 4 5 6
    console.log(arr.indexOf(1))// 0
    console.log(arr.indexOf(100))//-1
    console.log(arr.indexOf(1,3)//4
    console.log(arr.indexOf(1,5)//-1
    
    console.log('arr:' ,arr)//不会改变原数组
    
    
    //手写一个indexOf函数实现功能
     var arr = [1, 2, 3, 4, 1, 2, 3]
        function indexOf(arr, num, b = 0) {
            for (var i = b; i < arr.length; i++) {
                if (num === arr[i]) {
                    return i
                }
            }
            return -1
        }
        var res = indexOf(arr,2,2)
        console.log(res)

9、lastIndexOf

  • 语法:数组.lastIndexOf(数据)
  • 作用:按照从右到左的顺序,查找数组中是否包含这个数据
  • 返回值:找到了,返回从右到左第一次出现的下标;否则返回-1
        var arr = [100, 200, 300, 400, 100, 500]
        var res=arr.indexOf(100)
        console.log(res)//0
        var res2=arr.lastIndexOf(100)
        console.log(res2)//4

10、slice

  • 语法:数组.slice(开始索引,结束索引)
  • 包前不包后
  • 两个参数可以省略不写;相当于复制整个数组
    • 开始索引:默认为 0
    • 结束索引:默认为 数组长度;省略结束下标,会从开始下标复制到数组结束
  • 参数可以支持负数,相当于数组.length + 负数
  • 作用:复制出数组中指定范围的内容
  • 返回值:以新数组的形式返回复制出来的数据
        var arr = [100, 200, 300, 400, 100, 500]
        var res = arr.slice(1,3)
        console.log(arr,res)//[100, 200, 300, 400, 100, 500]  [200, 300]
        var res2=arr.slice(1,-2)
        console.log(res2)//[200, 300, 400] 从右往左截取掉2个
        var res3=arr.slice(1)
        console.log(res3)//[200, 300, 400, 100, 500]  从索引位置开始到最后全部截取
        var res4=arr.slice(-3)
        console.log(res4)//[400, 100, 500] 从右往左截取3个

11、concat

  • 语法:数组.cancat(数据1,数据2,数据3...)
  • 作用:把传入的数据合并到指定的数组中进行拼接
  • 注意:不会改变原数组
  • 返回值:拼接好的新数组
        var arr = [100, 200, 300, 400, 100, 500]
        var res = arr.concat([500, 600])
        console.log(arr, res)//[100, 200, 300, 400, 100, 500]   [100, 200, 300, 400, 100, 500, 500, 600]
        var arr2 = ['jzx', 'is', 'a', 'pig']
        var res2=arr.concat(arr2)
        console.log(arr,res2)//[100, 200, 300, 400, 100, 500]  [100, 200, 300, 400, 100, 500, 'jzx', 'is', 'a', 'pig']

12、join

  • 语法:数组.join()
  • 作用:将数组用连接符将数组内的所有元素,连接成为一个完整的字符串
  • 返回值:连接好的字符串
  • 如果不传参数,默认按照逗号连接
      var res = arr.join('---')
      console.log(arr,res)//[100, 200, 300, 400, 100, 500]     '100---200---300---400---100---500'

13、补充数组塌陷(使用splice清空数组)

     // 用splice清空数组
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
        for (var i = 0; i < arr.length; i++) {
            arr.splice(i, 1)
            i--
        }
        // arr.splice(0, arr.length)
        console.log(arr)

八、数组遍历的方法

1、forEach

  • 语法:数组.forEach(function(item,index,origin){遍历数组后你想要做的事})
    • item:数组中每一个元素
    • index:每一个元素对应的下标
    • origin:原数组
  • 作用:根据数组的元素内容,遍历数组,拿到数组的每一项
  • 返回值:没有返回值
  • 语义:遍历数组
            
            arr.forEach(function (item,index,origin) {
            console.log(item)
            console.log(index)
            console.log(origin)
            console.log('--------------')
        })

2、map

  • 语法:数组.map(function(item,index,origin){遍历数组后你想要做的事})
    • item:数组中每一个元素
    • index:每一个元素对应的下标
    • origin:原数组
  • 作用:根据原数组映射出来一个新数组
  • 返回值:是一个映射出来的新数组(需要在函数内部书写return)
  • 语义:映射数组
         var arr = [100, 200, 300, 400, 100, 500]  
         var res = arr.map(function (item, index, arr) {
            return item * 10
        })
        console.log(arr,res) //[100, 200, 300, 400, 100, 500]    [1000, 2000, 3000, 4000, 1000, 5000]
        })

3、filter

  • 语法:数组.filter(function(item,index,origin){遍历数组后你想要做的事})
    • item:数组中每一个元素
    • index:每一个元素对应的下标
    • origin:原数组
  • 作用:过滤数组
  • 返回值:过滤出来的内容组成的一个新数组
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        var res = arr.filter(function (item) {
            return item % 2 === 0
        })
        console.log(res) // [2, 4, 6, 8]

4、find

  • 语法:数组.find(function(item,index,origin){遍历数组后你想要做的事})
    • item:数组中每一个元素
    • index:每一个元素对应的下标
    • origin:原数组
  • 作用:去数组中查找内容
  • 返回值:从左至右第一个符合条件的内容,如果找不到返回undefined
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        var res = arr.find(function (item) {
            // return item % 2 === 0
            return item > 5
        })
        // console.log(res) // 2
        console.log(res) // 6

5、findIndex

  • 语法:数组.findIndex(function(item,index,origin){遍历数组后你想要做的事})
    • item:数组中每一个元素
    • index:每一个元素对应的下标
    • origin:原数组
  • 作用:去数组中查找内容
  • 返回值:从左至右第一个符合条件的内容的下标,如果找不到返回-1
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        var res = arr.findIndex(function (item) {
            return item % 2 === 0
            // return item > 5
        })
        console.log(res) // 1
        // console.log(res) // 5

6、every

  • 语法:数组.every(function(item,index,origin){遍历数组后你想要做的事})
    • item:数组中每一个元素
    • index:每一个元素对应的下标
    • origin:原数组
  • 作用:判断数组中是否全部都符合条件
  • 返回值:符合条件返回true 否则返回false
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        var res = arr.every(function (item) {
            return item % 2 === 0
        })
        console.log(res) // false

7、some

  • 语法:数组.some(function(item,index,origin){遍历数组后你想要做的事})
    • item:数组中每一个元素
    • index:每一个元素对应的下标
    • origin:原数组
  • 作用:判断数组中有没有符合条件的元素
  • 返回值:有符合条件返回true 否则返回false
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        var res = arr.some(function (item) {
            return item % 2 === 0
            // return item > 0
        })
        console.log(res) // true

8、reduce

  • 语法:数组.reduce(function(prev,item,index,origin){},init)
    • 参数1:function(prev,item,index,origin){}
      • prev:如果是第一次执行那么可能是数组[0]的值,也有可能是init; 如果是第一次后续的执行,那么它的值就是上一次遍历返回的结果
    • 参数2:init
      • 随意传递一个值即可,只要符合需求
  • 作用:累加器
  • 返回值:累加后的结果
        var arr = [1, 2, 3, 4, 5]
        var res = arr.reduce(function (prev, item, index, origin)         {
            return prev + item
        }, 10)
        console.log(res)//25=10+1+2+3+4+5
        var arr = [1, 2, 3, 4, 5]
        console.log('原数组: ', arr)
        var res = arr.reduce(function (prev, item) {
            return prev + item
        }, "")
        console.log(res)//字符串12345