Array

作者: Mr丨qing | 来源:发表于2017-05-21 18:08 被阅读0次

    5.21array学习

     * 11.数组
     * 12.关联(hash)数组
     * 13.数组API
     * 14.二维数组
    
    数组

    多个变量的集合,起一个统一的名字——用法
    连续保存多个数据的引用类型的对象——存储
    为什么使用数组:
    程序=数据结构+算法
    好的数据结构可以极大提高程序的执行效率!
    何时使用:程序中都是用数组集中管理多个数据

    创建: 5种

    1. var arr=[]; 创建空数组
    2. var arr=[值1,值2,...]; 创建同时初始化数组元素
    3. var arr=new Array(); 创建空数组
    4. var arr=new Array(n); 创建n个空元素的数组
    5. var arr=new Array(值1,值2,...);创建同时初始化数组元素
      数组是引用类型对象:按值传递
      原始类型的值,赋值后,相互不影响
      引用类型的对象,赋值后,依然引用同一个对象
      任何修改,都会影响对方。

    null:主动释放一个对象
    建议:使用完较大的对象后,都要主动释放

    var arr = [1,2,3];
    var arr1 = arr;
    console.log(arr);      //1  2  3
    console.log(arr1);      //1  2  3
    
    //由于数组是引用类型对象   所以改变任意一个  都会使元数组发生改变
        arr[0] = 10;
        console.log(arr);       //10   2   3
        console.log(arr1);      //10   2   3
    /*arr1[0] = 100 ;
    console.log(arr);       //100   2   3
    console.log(arr1); */       //100   2   3
    
    console.log(null == undefined);   //true
    console.log(null === undefined);    //false   null和undefined 类型是不一样的
    /**
     * undefined 是从null里衍生出来的   null是给程序员用的
     */
    
    //length属性  数组中的遍历用的比较多
    /**数组的length属性固定套路:2个
    1. 获得最后一个元素值: arr[arr.length-1]
    2. 向数组末尾追加一个新元素:arr[arr.length]=新值;
     *
     * 遍历数组: 依次对数组中每个元素执行相同操作
        //三要素:
         1. 条件: 下标i<数组长度
         2. 变量: 下标i 从0开始,每次++
         for(var i=0;i<arr.length;i++){
         当前元素:arr[i]
    }
     */
    var arr2 = [1,2,3,,1,2];
    var sum = 0;
    for(var i=0;i<arr2.length;i++){
        if(arr2[i]===undefined){
            continue;
        }
        sum += arr2[i];
    }
    console.log(sum);
    
    关联(hash)数组

    如何创建
    1种:

    1. 先创建空数组: var arr=[];
    2. 再向数组中添加元素: arr[key]=value;
      强调:key必须是字符串
      length属性无效!
      使用:arr[key]

    关联数组优点:快速精确查找!不需要遍历!和数据量无关!
    如何遍历hash数组:
    for(var key in hashArr){//反复取出每个key放入变量key中
    key中获取的仅是元素的下标名称
    当前元素的值: hashArr[key]
    }

    var hash = [];
    hash['a'] = '鹿晗';
    hash['b'] = '李晨';
    hash['c'] = 'baby';
    console.log(hash.length);      //length属性无效
    for (var key in hash){
        console.log(key+':'+hash[key]);
    }
    
    数组API
    1. 数组 to 字符串
      var str=arr.toString(); 返回数组中元素的内容,用逗号分隔
      var str=arr.join("连接符"); 可自定义连接符
    var str = [1,2,3,4,5];
    console.log(str.toString());
    console.log(str.join('=='));
    
    var joins = ['h','e','l','l','o'];
    console.log(joins.join(''));
    

    2.拼接数组:concat
    var newArr=arr1.concat(arr2,值1,值2,......)
    强调:concat不修改原数组,总是返回一个新数组

    var arrCon = [1,2,3];
    var arrCon1 = [7,8,9];
    var arrCon2 = arrCon.concat(4,5,6,arrCon1);  //concat不修改原数组所以需要用变量接住
    console.log(arrCon2);
    

    3.获取子数组:slice
    var subArr=arr.slice(starti,endi+1);
    starti: 开始位置的下标
    endi: 结束位置的下标,含头不含尾
    slice支持负数参数,如果参数为负,则自动用length-参数

    var arrSlice = [1,2,3,7,8,9];
    var arrSlice1 = arrSlice.slice(1,3);
    var arrSlice2 = arrSlice.slice(-3,-1);
    console.log(arrSlice1);     // 2 3
    console.log(arrSlice2);     // 7 8
    

    4.splice: 删除 插入 替换 --> 直接修改原数组对象

    1. 删除: arr.splice(starti,n)
      从starti位置开始,删除n个元素

    2. 插入: arr.splice(starti,0,新值1,新值2,......)
      在starti位置插入新值1,新值2,......
      原starti位置及其之后的元素,被向后顺移

    3. 替换: arr.splice(starti,n,新值1,新值2,......)
      新元素的个数和n不一定相等
      数组会自动调整元素的位置和长度

    //删除
    var arrSplice = [1,2,3,4,5];
    var deletes = arrSplice.splice(0,2);
    console.log(arrSplice);     //3  4  5
    console.log(deletes);     //1  2
    
    //插入
    arrSplice.splice(1,0,1,1,1);
    console.log(arrSplice);     // 3  1  1  1  4  5
    
    //替换
    arrSplice.splice(1,3,0,0,0);
    console.log(arrSplice);     // 3  0  0  0  4  5
    
    /**
     * 5.颠倒数组中所有元素的位置:arr.reverse();
     */
    var arrReverse = [1,2,3];
    arrReverse.reverse();
    console.log(arrReverse);    //3  2  1
    
    /**
     * 6.数组的sort方法
     * sort方法:默认将每个元素转为字符串,再按升序排列
     * 1. 定义比较器函数:专门比较任意两值大小的函数
        规定:两个参数(a , b),
        必须返回数字:如果a>b,就要返回正数
        如果a<b,就要返回负数
        如果a=b,就要返回0
     2. 将比较器函数对象作为参数传入sort方法中
     */
    
    var  arrSort = [3,5,1,4,9,6];
    function compare(a,b){
        if(a > b){
            return 1;
        }else if(a == b){
            return 0;
        }else{
            return -1;
        }
    }
    arrSort.sort(compare);
    console.log(arrSort);   //1  3  4  5  6  9
    
    /**
     * 7.栈和队列
     * 结尾出入栈:
        入栈: arr.push(新值);  ==>arr[arr.length]=新值;
        出栈: var last=arr.pop();
        无论出入栈都不影响已有元素的位置——效率高
    
     * 开头出入栈:
        入栈: arr.unshift(新值);
        出栈: var first=arr.shift()
        每次出入栈都会影响所有剩余元素的位置发生顺移——低
    
     * 队列:只能从一端进入,必须从另一端出
        何时使用:只要先到的先得
        FIFO:
        结尾入队列:arr.push(新值);
        开头出队列:var first=arr.shift();
     */
    
    //结尾出入栈
    var arrPush = [1,2,3];
    arrPush.push(4);
    console.log(arrPush);   // 1  2  3  4
    arrPush.pop();
    console.log(arrPush);   // 1  2  3
    
    //开头出入栈
    var arrUnshi = [1,2,3];
    arrUnshi.unshift(0);
    console.log(arrUnshi);  // 0 1 2 3
    arrUnshi.shift();
    console.log(arrUnshi);  // 1 2 3
    
    //队列
    var queue = [1,2,3];
    queue.push(4);
    queue.shift();
    console.log(queue);     // 2 3 4
    

    冒泡排序

    var examplearr=[8,94,15,88,55,76,21,39];
    function sortarr(arr){
        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;
                }
            }
        }
        return arr;
    }
    sortarr(examplearr);
    console.log(examplearr);
    

    在以后的笔试当中可能需要我们手写冒泡排序

    二维数组

    数组的元素又引用了另一个子数组
    何时使用:保存横行竖列的二维数据
    保存上下级关系的数据
    如何创建:2步:

    1. 创建一个空数组:var data=[];
    2. 设置数组中每个元素再引用另一个小数组
      data[0]=[0,0,0,0];
      访问二维数组中任意位置的元素:data[r][c]
      ***二维数组行下标r不能越界,越界就报错

    遍历二维数组:固定套路:
    外层循环遍历行,内层循环遍历当前行的中的列
    for(var r=0;r<data.length;r++){
    for(var c=0;c<data[r].length;c++){
    当前元素:data[r][c]
    }
    }

    var twoArr = [[1,2],[3,4],[5,6]];
    console.log(twoArr[0][0]);      //1
    console.log(twoArr[0][1]);      //2
    console.log(twoArr[1][1]);      //4
    //遍历
    for(var r=0;r<twoArr.length;r++){
       for(var c=0;c<twoArr[r].length;c++){
              console.log(twoArr[r][c]);
       }
    }

    相关文章

      网友评论

          本文标题:Array

          本文链接:https://www.haomeiwen.com/subject/ghkvxxtx.html