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++;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM