js第六天(数组下)


前言

数组在程序中使用是非常频繁的,今天主要讲解数组存储结构,数组常用方法,ES5常用遍历数组方法,以及对数组排序中的冒泡排序


一、数组存储结构

基本数据类型变量都存储在栈区域

引用变量(对象)存储在栈区域

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

 


二、数组常用方法

1.push  向数组添加元素

代码如下(示例):

<script>

 var arr = [35, 37, 45, 47, 55, 88]
        console.log(arr)

        // push向数组添加元素
        arr.push(89)
        console.log(arr)

</script>

2.pop 删除数组末尾的一个元素

代码如下(示例):

<script>

 var arr = [35, 37, 45, 47, 55, 88]
        console.log(arr)

       //pop 删除数组末尾的一个元素
        arr.pop()
        console.log(arr)

</script>

3.unshift 在数组最前面添加一个元素

代码如下(示例):

<script>

 var arr = [35, 37, 45, 47, 55, 88]
        console.log(arr)

        //unshift 在数组最前面添加一个元素
        arr.unshift(65)
        console.log(arr)

</script>

 4.shift 删除数组最前面一个元素

 代码如下(示例):

<script>

 var arr = [35, 37, 45, 47, 55, 88]
        console.log(arr)

        //shift 删除数组最前面一个元素
        arr.shift()
        console.log(arr)

</script>

5.splice(下标,元素个数)  用于截取替换

 代码如下(示例):

<script>

 var arr = [35, 37, 45, 47, 55, 88]
        console.log(arr)

         //splice(下标,元素个数)  用于截取替换
        arr.splice(1, 2) //删除从下标1开始,删除两个元素
        console.log(arr)

        arr.splice(2, 2, 45, 50) //将下标为2和三的元素分别替换为45,50
        console.log(arr)

</script>

6.reverse  反转数组元素

 代码如下(示例):

<script>

 //reverse  反转数组元素
        var arr2 = [20, 30, 40, 50, 60]
        console.log(arr2)
        arr2.reverse()
        console.log(arr2)

</script>

7.sort 用来给数组排序,先将数组转为字符串, 使用字符编码Unicode进行排序

 代码如下(示例):

<script>

 //sort 用来给数组排序,先将数组转为字符串, 使用字符编码Unicode进行排序
        var arr3 = [17, 20, 41, 14, 100]
        console.log(arr3)
        var fun = function (a, b) { //排序函数,改变排序规则
            if (a > b) {
                return -1 //负数升序排序,整数降序排序
            }
        }
        arr3.sort(fun)
        console.log(arr3)
</script>

8.concat 把多个数组进行拼接

代码如下(示例):

<script>

//concat 把多个数组进行拼接
        var arr4 = [4, 5, 6, 7]
        var arr41 = arr4.concat([1, 2, 3])
        console.log(arr41)
</script>

 9.join 把数组里的每一项内容连接起来,变成一个字符串

代码如下(示例):

<script>

 //join 把数组里的每一项内容连接起来,变成一个字符串
        var arr5 = [1, 2, 3, 4, 5] // -> 1-2-3
        var str = arr5.join('&')
        console.log('str ', str)
</script>

10.slice 返回一个新的数组对象,原数组的浅拷贝(包括begin,不包括end),原数组不会被改变 

代码如下(示例):

<script>

// slice 返回一个新的数组对象,原数组的浅拷贝(包括begin,不包括end),原数组不会被改变
 var arR = ['html', 'css', 'javascript', 'vue', 'react']
        var newarr1 = arR.slice(1, 3)
        console.log(newarr1) //输出为['css', 'javascript']

        var newarr2 = arR.slice(-3)
        console.log(newarr2) //输出为['javascript', 'vue', 'react']

</script>

11.indexOf 获取索引号,如果没有对应的数组元素,就会返回-1

代码如下(示例):

<script>

 var arr6 = [10, 20, 30, 40]
        //        0  1  2  3
        var index = arr6.indexOf(300)
        console.log('index ', index); // 如果元素不存在,返回-1

</script>

12.includes 判断数组是否有某个元素 ,元素存在返回true 不存在返回false

代码如下(示例):

<script>

    var arr = [35, 37, 45, 47, 55, 88]
    console.log(arr)

 // includes 判断数组是否有某个元素 ,元素存在返回true 不存在返回false
        console.log(arr.includes(200));

        if (arr.indexOf(30) == -1) {
            console.log('30不存在数组中');
        } else {
            console.log('30存在数组中');
        }

</script>

三、ES5常用遍历数组方法

1.forEach 遍历数组

代码如下(示例): 

<script>
var arr=[89,78,64,56,91,54,95]
   forEach 遍历数组
        arr.forEach(function(item,index,arr){
            //item  第一个形参(数组元素)
            //index 第二个形参(索引号)
            //arr 第三个形参 (原数组)

        }) 
        console.log(arr)

        //forEach 遍历数组  求最大值
        var max=0
        arr.forEach(function(item,index){
            if(item > max){
               max=item
            }
        })
        console.log('数组最大值为:',max)

</script>

2.map     作用:1.遍历数组   2.映射数组,return返回值

代码如下(示例):  

<script>

     var arr=[89,78,64,56,91,54,95]
      // map 1.遍历数组   2.映射数组,return返回值
        function textMap(){
            var arr1=arr.map(function(item,index){
                console.log('item,',item)
                return item-10
            })
            console.log(arr1)
        }
        textMap()

</script>

3.filter 过滤元素,选择满足条件的元素,过滤掉不满足条件的元素 

代码如下(示例):   

<script>

    //filter 过滤元素,选择满足条件的元素,过滤掉不满足条件的元素 

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

      return 条件

   })


  //输出 [新元素1,新元素1,....]
</script>

4.find 遍历数组,查找到满足条件的第一个元素就返回

代码如下(示例):  

<script>

    //find 遍历数组,查找到满足条件的第一个元素就返回

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

      return 条件

   })
</script>

5.every 遍历数组,判断数组所有元素是否满足条件,如果全部满足,就返回true,如果有一个不满足,返回false

代码如下(示例):  

<script>

    //every 遍历数组,判断数组所有元素是否满足条件,如果全部满足,就返回true,如果有一个不满足,返回false

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

      return 条件

   })
</script>

6.some 遍历数组,判断数组所有元素是否满足条件,只要有一个元素满足条件就返回true

 代码如下(示例):  

<script>

    //some 遍历数组,判断数组所有元素是否满足条件,只要有一个元素满足条件就返回true

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

      return 条件

   })
</script>

7.reduce 

reduce() 方法主要接收一个方法作为累加器,数组中的每个值(从左至右) 开始合并,最终为一个值。 

 代码如下(示例):  

<script>
//  数组遍历reduce方法
             [98, 57, 78, 95, 89, 99]

            reduct(callFun, [initValue])

               callFun:  function(previousValue,currentValue,currentIndex,arr){
                              
                         }
            forEach(function(currentValue,currentindex,arr){

            })
            //previousValue 上一个值,如果initValue存在,第一遍历时previousValue就是initValue
                    // currentValue 当前数组元素
                    // currentIndex 当前数组下标
                    // arr 原数组
</script>

reduce 实例

<script>
 // reduce应用累加求和
            function test3(){
                //  [98, 57, 78, 95, 89, 99]
                // currentValue: 98: 57 , 78
                var sum = arr.reduce(function(previousValue,currentValue){ //previousValue: 0, 98 (98 + 57)
                    return previousValue + currentValue//previousValue: 0 + 98 + 57 +78
                },0)
                console.log('sum ',sum)
            }
            test3()


</script>

 四、冒泡排序

原理:相邻两个数两两比较,如果前一个数比后一个数大,就交换位置

第一轮结束后,最大的数在最后面,之后重复此步骤

n个数 比较n-1次

 [89,98,78,68,76]
            冒泡排序
              相邻两个数,两两比较,如果前面的数大于后面的数,交换位置, 第一轮比较完,最大数到最后面
              第二轮重复上述操作,找到第2大数
              三                     3
              四                     4
              n个数     n-1轮      比较次数
                5        1          4
                         2          3 
                         3          2
                         4          1
                 

冒泡排序实例 

 <script>
        // var arr=[89,78,64,56,91,54,95]

       
        var i
        var j
        var temp
        var arr=[89,78,64,56,95,54,91]
        var n=arr.length
        // 外层循环,冒泡的轮数
        
        for(i=0;i<n-1;i++){
        //内层循环,相邻两两比较,前面较大就交换
        for(j=0;j<n-i-1 ;j++){
            if(arr[j] > arr[j+1]){
                temp=arr[j]
                arr[j]=arr[j+1]
                arr[j+1]=temp

            }
        }
    }
        console.log(arr)
    </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值