js引用类型--数组

前言

今天无由的在博客上开了一个‘随写知识点总结’,目的呢,就是想每次遇到基础知识点,会积累系统全面的总结知识点,加深自己的根基,也方便
以后的知识复习及查询。
切入正题,今天个人总结的是js数据类型的引用类型的Array对象

1.什么是数组?

数组是值的有序集合,而且可以存放js各种数据类型,因为js是弱类型的语言,所以不像其他语言数组只能存放特定的数据类型
  注意:1. ECMAScript语言中的数组是可以动态变化的(因为是js的数组的数值存储采用链式结构存储)
        2.Array数组是数据的有序列表。所以数组里的数值都有特定的索引值
        3.ECMAScript同一个数组中可以存储不同类型的数据;
        4.每个数组都有一个length属性

2.数组的创建

1.使用new Array()方法
            创建未知长度的数组  var arr1=new Array();
            创建数据长度       var arr2=new Array(20);
            创建存放元素的数组   var arr3=new Array(20,10,'hello',null,undefined)
        2.使用Array()方法
        3.使用字面量创建,也是以后最常用创建的方法
            var arr4=[1,2,4];


3.数组元素的读和写

通过下标来读取数组的值  arr[5]='hello'

4.数组的长度:length属性

通过数组的length属性来获取数组的长度   arr=['h','dsa','as'];arr的长度为arr.length

5.检测数组

判断是否是数组,使用Array.isArray(要判断的变量), 但值得注意的是:(typeof 要判断变量)或(typeof(要判断的变量)格式判断的是基本数据类型,即局限性就是在于基本数据类型,引用类型都是返回object


6.数组方法


1.将数组转为字符串的方法

      1>toString()方法,形如:arr.toString(),数组元素转为字符串,数组元素默认以“,”来分隔
      2>join('符号'),形如:arr.join('+')使用指定符号来分隔元素

2.数组末尾操作增减

      1>push()方法,形如:arr.push('新元素1','新元素二'),从数组末尾的位置添加新元素,并返回数组的长度
      2>pop()方法,形如:arr.pop(),从数组末尾删除一个元素,并把删除的元素返回出来

3.数组开头操作增减

      1>shift()方法,形如:arr.shift()删除数组开头第一个元素,并返回删除的元素
      2>unshift()方法,形如:arr.unshift()在数组开头添加一个元素

4.concat()方法

      形如:var arr1=arr.concat('数组元素',’另外一个数组’)根据现有数组创建新数组,即原数组添加元素或者一个数组而产生新的数组

5.slice()方法

        形如:var arr1=arr.slice(开始下标,结束下标[可选]),注意:截取不包含结束下标,根据当前数组中一个或多个元素创建另一个数组

6.splice()方法

        对数组的增删改操作,形如:arr.splice(起始下标位置,要删除的元素个数,要插入的元素) 注意:当要删除的元素个数为0,就是对数组增操作
           eg.var arr1=[1,23,12,45,3];arr1.splice(2,0,'red')
           var arr2=[1,23,12,45,3];arr2.splice(0,2);
           var arr3=[1,23,12,45,3];arr3.splice(0,3,'green')

 7.indexOf()

        获取数组元素的下标,形如:arr.indexOf(要查找的元素,要搜索的起始位置[可选])

7.二维数组

数组元素其实也是一个数组

8.数组元素的遍历

使用for循环遍历

9,数组实现对数组的排序


列举常用的方法:

          1>使用冒泡排序

代码如下:
             
//定义一个排序函数,第一个参数是需要排序的数组,第二个参数是以哪种方式排序
              //true代表升序,false代表降序
              function(arr,isAscend){
                  for(var i=0;i<arr.length-1;i++){
                      for(var j=0;j<arr.length-i;j++){
                          var temp;
                          if(isAscend){
                              if(a[j]>a[j+1]){
                                temp=a[j];
                                a[j]=[j+1];
                                a[j+1]=temp;
                              }
                          }else{
                              if(a[j]<a[j+1]){
                                temp=a[j];
                                a[j]=[j+1];
                                a[j+1]=temp;
                              }
                          }
                      }
                  }
                  return arr;
              }

2>使用自定义的排序函数结合sort()实现排序

代码如下:
function sortArray(arr,isAscend){
                      //这是一个升序函数
                      function compare1(value1,value2){
                        if(value1>value2){
                            return 1;
                        }else if(value1=value2){
                            return 0;
                        }else{
                            return -1;
                        }
                      }
                      //这是一个降序函数
                      function compare2(value1,value2){
                        if(value1<value2){
                            return 1;
                        }else if(value1=value2){
                            return 0;
                        }else{
                            return -1;
                        }

                        //如果传入的参数,需要升序就调用compare1函数,否则调用compare2函数
                        if(isAscend){
                          arr.sort(compare1);
                        }else{
                          arr.sort(compare2)
                        }

                      }

                  }

3>快速排序算法

原理思路:
                    1.在数据集之中,找个基准点
                    2.建立两个数组,分别存储左边和右边
                    3.利用递归进行下次比较
function quickSort(arr){
                      if(arr.length<=1){   //如果数组只有一个数,就直接返回  ,递归的终止条件
                        return arr;
                      }
                      var num=Math.floor(arr.length/2);//找到中间的索引值,如果是浮点数,则向下取整
                      var newValue=arr.splice(num,1);  //找到中间数的值
                      var left=[],right=[];
                      for(var i=0;i<arr.length;i++){
                        if(arr[i]<newValue){
                          left.push(arr[i]);   //基准点的左边的数传到左边数组
                        }else{
                          right.push(arr[i]);
                        }
                      }
                      return quickSort(left).concat(newValue,quickSort(right));
                    }
                    console.log(quickSort([12,2,3,12,2,11,1,34]));

生活寄语

爱代码,爱上生活!













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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值