zoukankan      html  css  js  c++  java
  • js-数组、类数组

    js-数组

    数组的定义

    1. new Array(length/content)
    2. 字面量
    • 区别:当只传一个参数时,new Array会把参数当成是长度,即创建一个限定长度的值为undefined的数组;字面量则认为这一个参数是数组第一个元素。
    //数组的定义
        var arr = [1,2,3];//数组字面量
        var arr1 = new Array(1,2,3,4,5);
        
        var arr2 = new Array(10);//[object Array]: [, , , , , , , , , ];length: "10"
        var arr3 = [10];//[object Array]: [10];length: "1"
    

    数组的读和写

    • 读:arr[num];//不能溢出读,结果为undefined
    • 写:arr[num] = xxx; //可以溢出写

    数组常用的方法 (基于ES3.0)

    1.改变原数组
    - push, pop, shift, unshift, reverse,sort
    - splice

    //数组常用的方法
        //1.push--在数组末尾添加元素
        var arr = [1,2,3];
        Array.prototype.push = function(num){
          for(var i = 0;i < arguments.length; i++){
            this[this.length] = arguments[i];
          }
          return this.length;
        }
        arr.push(4,5,6);//[1,2,3,4,5,6]
    	
        //2.pop--从数组后面剪切最后一个元素,返回被剪切的元素
        arr.pop();//[1,2,3,4,5]
    	
        //3.shift--从数组前面剪切
        arr.shift();//[2,3,4,5]
    	
        //4.unshift--从数组前面插入
        arr.unshift(0,0);//[0,0,2,3,4,5]
    	
        //5.reverse--数组元素反转
        arr.reverse();//[5,4,3,2,0,0]
    	
        //6.splice--截取数组,在特定位置添加元素;arr.splice(从第几位开始,截取几位,在切口处添加新的数据);
        arr.splice(1,3,0,0);//[5,0,0,0,0]
    	
        //7.sort--数组元素排序
        var arr1 = [2,3,1,-1,0,9];
        arr1.sort();//[-1,0,1,2,3,9]
        var arr2 = [1,3,4,2,10];
        arr2.sort();//[1,10,2,3,4];按ASCII码排序
          //重写sort函数:1)一定要写两个参数;2)看返回值:①当返回值为负数时,那么前面的数放在前面;②为整数,后面的数放在前;③为0,不动
        arr2.sort(function(a,b){
          return a<b?-1:1;//return a-b;//升序
          //return a>b?-1:1;//return b-a;//降序
        });
    	
    	//sort方法的其他拓展
    	//给一个有序的数组返回随机的乱序数组
        var arr3 = [1,2,3,4,5,6];
        arr3.sort(function (a,b){
          return Math.random()-0.5;
        });
    
        var chen = {
          name:"chen",
          age:10,
          gender:"female"
        };
        var cheng = {
          name:'deng',
          age:30,
          gender:'undefined'
        };
        var he = {
          name:'he',
          age:40,
          gender:'male'
        };
        var arr4 = [chen,he,cheng];
        arr4.sort(function(a,b){
          return a.age - b.age;
        });
    
        var arr5 = ['a','sdffeee','df陈陈陈陈','dweshyrrebe','dfrfa'];
        arr5.sort(function(a,b){
          // return a.length-b.length;//按字符串长度排序
          return retBytes(a)-retBytes(b);//按字符串字节长度排序
        });
        function retBytes(a){
          var cnt = 0;
          for(var i = 0;i < a.length;i++){
            (a.charCodeAt(i)>255) ? ++cnt : cnt;
          }
          var res = a.length + cnt;
          return res;
        }
    

    2.不改变原数组

    • concat, join --> split, toString, slice
    //不改变原数组
        //1.concat
        var arr = [1,3,4];
        var arr1 = [4,5,6,9];
        var arr2 = arr.concat(arr1);
        console.log(arr);//[1,3,4]
        console.log(arr1);//[4,5,6,9]
        console.log(arr2);//[1,3,4,4,5,6,9]
    	
        //2. toString -- 把数组重写成字符串
        toString(arr);
        console.log(arr);
    
        //3. join--把数组用特定字符连接成字符串
        var str = arr.join("-");//"1-3-4"
        str = arr.join("");//"134"
    
        //4. split--把字符串分割成一个字符串数组
        var str1 = 'andnjhskj,sjvshv';
        console.log(str1.split(','));//["andnjhskj","sjvshv"]
        console.log(str1.split(',',1));//["andnjhskj"]
    
        //5. slice--从已有数组中返回选定的元素
        var arr3 = [1,2,3,4];//arr.slice(开始截取的位置,直到这一位之前)
        console.log(arr3.slice(1,3));//[2,3]
    

    类数组

    • 类数组 --> 属性要为索引属性,必须要有length属性,最好加上push。
        var obj = {
          "2":"a",
          "3":"b",
          "length":2,
          "push":Array.prototype.push,
          "splice":Array.prototype.splice
        }
        obj.push("c");
        obj.push("d");
      console.log(obj);//[obj] = {"2":"c","3":"d","length":4,"push":Array.prototype.push,"splice":Array.prototype.splice}
      //因为Obj的push是根据length对应的位置添加的,而原对象里面的length=2,即第一个元素的key名称。
    
        //push 原理
        Array.prototype.push = function push(target){
          obj[obj.length] = target;
          obj.length++;
        }
    
     
  • 相关阅读:
    2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛
    2020: [Usaco2010 Jan]Buying Feed, II
    3396: [Usaco2009 Jan]Total flow 水流
    3403: [Usaco2009 Open]Cow Line 直线上的牛
    2102: [Usaco2010 Dec]The Trough Game
    最小生成树——Kruskal算法
    最短路径——Floyd算法(含证明)
    最短路径——Bellman-Ford算法以及SPFA算法
    最短路径——Dijkstra算法以及二叉堆优化(含证明)
    普通并查集
  • 原文地址:https://www.cnblogs.com/1549983239yifeng/p/14431132.html
Copyright © 2011-2022 走看看