JavaScript数组

 数组

       1.基本数据类型变量都储存在栈区域 string number boolean undefined null

       2.引用变量储存在栈区域

       3.复杂数据类型储存在堆区域,赋值时是将对象在堆区域地址赋给变量

       对象内存结构

       //字面量方式创建对象obj

       var obj={

        name:'jack',

        age=18

       }

       var obj1=obj

       obj1.age=20

       console.log('obj.age:',obj.age)

    数组的常用方法

    object对象

    数组对象

        属性 和 方法

        var arr=[10,20,30]

        arr.length  属性

        方法  

        1.push

          => arr.push()//push方法  

          => 向数组追加元素

        2.pop

          => arr.pop()//pop方法

          => 弹出(删除)数组最后一个元素

        3.unshift

          => arr.unshift()//unshift 方法

          => 数组前面添加元素

        4.shift

          => arr.shift

          => 删除数组最前面元素

        5.splice//截取元素

          => arr.splice(下标,元素个数)

          => 删除下标开始n个元素,也可用其他元素来代替

          arr.splice(1,2,'截取后替代元素')

        6.reverse 反转数组

          => arr.reverse()//数组反转

        7.sort//数组排序

          => 默认从低到高,规则先转字符串,使用字符编码unicode

        8.concat

          => 多个数组进行并接

        9.join

          => 把数组里面的每一项内容连接起来,变成字符串

        10.slice

          => 获取到从下标开始后的数据

        11.indexOf

          => 找到数组中某一项的索引,也可以判断元素是否存在(-1)

        12.includes

          => 检测数组是否包含runnob(判断数组元素是否存在)

        ESS常用数组遍历

        1.foreach()

          => arr.foreach(function(index,item){

            //匿名函数  function(){}

            //index 第一个形参数组元素

            //item 第二个形参索引号(下标)

            console.log('index:',index,'item:',item)

          })

        //练习最高分最大值查找

        var max=0

        var arr=[98,67,78,89,95]

        arr.foreach(function(item,index){

            if(item>max){

                max=item

            }

        })

        console.log('最大值是:',max)

        2.map

          => 1.遍历数组,与foreach类似

             2.映射新数组,return返回值

          var arr=[1,2,3]

          var newArr=arr.map(function(item,index){

            //return 新元素

            return item+10

          })

          console.log(newArr)

        3.filter

          =>

          查找大于70分的成绩

          function testFilter(){

            var newArr=arr.filter(function(item){

                return item>70

            })

            console.log(newArr)

          }

          testFilter()

        4.find

          => 查找第一个满足的元素

        function testFind(){

            var newItem=arr.find(function(item){

                return item>80

            })

            console.log(newItem)

        }

        testFind()

        5.every

        => 遍历数组,查找数组元素是否全部满足条件

        //判断所有学生是否都及格

        function testEvery(){

          var isOk=arr.every(function(item){

            return item >60

          })

          console.log(isOk)

        }

        testEvery()

        6.some

          => 遍历数组,查找数组元素是否有满足条件,有一个满足条件就返回true

          判断成绩数组是否有不及格学生

        function testSome(){

            var isOk=arr.some(function(item){

                return item<60

            })

            console.log(isOk)

        }

        testSome()

        7.reduce

          => 1.遍历数组元素

             2.执行函数调用,将callFun函数计算结果

             var arr=[98,57,78,95,89,99]

             arr.reduce(function(previousValue,currentValue,currentIndex,arr){

                //previousValue 上一个值,如果initValue存在,第一遍遍历时previousValue就是initValue

                //currentvalue 当前元素组

                //currentIndex 当前数组下标

                // arr 函数组

                return previousValue

                console.log(previousValue,currentValue,currentIndex,arr)

            },0)

            function test2(){

                arr.reduce(function(previousValue,currentValue,currentIndex,arr){

                //previousValue 上一个值,如果initValue存在,第一遍遍历时previousValue就是initValue

                //currentvalue 当前元素组

                //currentIndex 当前数组下标

                // arr 函数组

                console.log(previousValue,currentValue,currentIndex,arr)

                return previousValue    

            })

            }

            test2()

            //应用累加求和

            function test3(){

                var sum=arr.reduce(function(previousValue,currentValue){

                    return previousValue+currentValue

                },0)

                console.log(sum)

            }test3()

        数组的排序

        冒泡排序

          相邻两个数,两两比较,如果前面数大于后面数两两交换位置

          第一轮比较完,最大数到最后面

          第二轮重复上述操作,找到第二大数、

          3 4    3

          4 5    4

          n n-1  比较次数

          5  1   4

             2   3

             3   2

             4   1

        var arr=[89,98,78,68,76]

        for(var j=0;j<arr.length-1;j++){

            for(var i=0;i<arr.length-j-1;i++){ //相邻两个数比较 if(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)

        }

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

 <!--

    选择排序

    排序思想

        1.n 个数  进行 n-1次选择

        2. 每次选择

               未排序数中找最小数下标,与前面的数交换位置

               例子下方test1

    数组去重

    例如[9,2,5,2,8,2,5] ->[9,2,5,8]

    方法一:利用indexOf 或 includes 实现

      思路:

      定义一个空数组 [] 储存去重后元素

      遍历原数组

        判断新数组中是否有原数组当前元素,如果没有,储存到新数组中

    方法二:利用双重for循环+splice实现

      外层循环遍历数组所有元素

         内层循环依次判断后面元素是否与外层循环元素相同,如果相同,截取掉

    代码下方test2

    -->

    <script>

        function test1(){

            var arr=[89,98,78,68,76]

            var n=arr.length

            // var minIndex=0 //假设最小数下标是第一个数

            for(var i=0;i<n-1;i++){//外层循环进行n-1次选择

                minIndex=i   //找最小数下标

                for(var j=1+i;j<n;j++){

                     if(arr[j]<arr[minIndex]){

                   minIndex=j

                    }

                    }

                    //交换位置

                     var temp=arr[i]

                     arr[i]=arr[minIndex]

                     arr[minIndex]=temp

                     console.log('第'+(i+1)+'次选择'+arr)

                    }

                    console.log(arr)

            }

        //test1()

        function test2(){

            var arr=[9,2,5,2,8,2,5]

            //方法一

          /*   var newArr=[]//储存去重后元素

            for(var i=0;i<arr.length;i++){//遍历原数组

                if(newArr.indexOf(arr[i])==-1){//判断新数组中是否有原数组当前元素,如果没有,储存到新数组中

                    newArr.push(arr[i])

                }

                // if(newArr.includes(arr[i])==false){

                // if(!newArr.includes(arr[i])){

                  // newArr.push(arr[i])

                // }

            }

            console.log(newArr) */

            /* var arr=[9,2,5,2,8,2,5]

            var newArr1=[]

            arr.forEach(function(item){

                if(newArr1.indexOf(item)==-1){

                     newArr1.push(item)

                }

            })

            console.log(newArr1) */

            //方法二

            for(var i=0;i<arr.length;i++){

                for(var j=i+1;j<arr.length;j++){

                    if(arr[i]==arr[j]){

                        arr.splice(j,1)

                        j--

                    }

                }

            }

            console.log(arr)

        }

        test2()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值