创建数组的三种模式

  1. var arr = new Array();不推荐
  2. var arr =[];
  3. var arr=Array();不推荐 ```javascript var arr = []; var arr1 = new Array();//不推荐 var arr2 = Array();//不推荐

var obj = {};//更加直观 var obj = new Object()//不推荐

console.log(arr.proto,arr1.proto,arr2.__proto);//所有数组都继承于Array.prototype

  1. <a name="BsXlf"></a>
  2. ## Array
  3. 1. new Array();
  4. 1. new Array(num) num 是数组的长度。num要是Number类型就是数组长度,否则就是数组元素
  5. 1. [,,,,,1,,,,]稀松数组。
  6. ```javascript
  7. var arr = new Array(2);//[empty * 2];
  8. var arr = new Array(2.2)//RangeError: Invalid array length
  9. var arr = new Array('a')//['a'];
  10. var arr = new Array(1,2,3,,4);//报错 Unexpected token ','

所有数组都继承于Array.prototype.

  1. 数组底层的机制就是继承于Object
  2. 数组的访问机制都是Object;

    1. var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    2. console.log(array[10])//undefined 类似于obj[10]
    3. /**
    4. * 解释 var obj = {
    5. * 0:1,
    6. * 1:2,
    7. * ....,
    8. * 9:10
    9. * }
    10. *
    11. /
    12. var arr = [, ,];
    13. arr = [, 1, 2, 3, 4, 5,];//稀松数组

    原数组上修改

  3. push

  4. unshift
  5. pop
  6. shift
  7. reverse
  8. splice
  9. sort

    push ,unshift

  • 返回值是 执行方法之后的的数组的长度

    push

  • 在数组最后一位添加元素(复数)。 ```javascript var arr = [1, 2, 3, 4, 5]; console.log(arr.push(6,7,8));//8 返回的是数组的长度。arr=[1,2,3,4,5,6,7,8,9,10]; arr.unshift(-2,-1,0);//8 返回的是数组长度。arr =[-2,-1,0];

Array.prototype.myPush = function(){ for(var i = 0;i<arguments.length; i++){ const element = arguments[i]; this[this.length] = element; } return this.length; }

  1. <a name="jKTjQ"></a>
  2. ### unshift
  3. - 在数组第一位添加元素
  4. ```javascript
  5. var arr = [1, 2, 3];
  6. arr.unshift(4,5,6);//arr [4, 5, 6, 1, 2, 3];

pop 、shift

如果数组为空数组 则返回undefined;

pop

  • 会剪切掉最后一位,并且返回被剪切的这一位

    shift

  • 会剪切掉第一位,并且返回被剪切的这一位。 ```javascript var arr = [1, 2, 3]; console.log(arr.shift());//1 console.log(arr);//[2, 3]

var brr = [1, 2, 3]; console.log(brr.pop())//3 console.log(brr)//[1, 2]

  1. <a name="L7P48"></a>
  2. ## reverse
  3. - 反转。返回的是反转之后的数组。
  4. ```javascript
  5. var arr = [1, 2, 3];
  6. var brr = arr.reverse();
  7. console.log(brr) //[3, 2, 1];
  8. brr==arr//true

splice

  • splice(p1,p2,p3,p4,….) 参数1:开始的下标 参数2:剪切长度.参数3 剪切以后最后一位开始添加数据。

开始的下标,剪切长度,剪切以后最后一位开始添加数据

  1. var arr = [1, 2, 3, 4, 5]
  2. // 0, 1, 2, 3, 4
  3. // -5,-4,-3,-2,-1
  4. //当开始位置是正值的时候
  5. var arr = [1, 2, 3, 4, 5];
  6. arr.splice(1,2);//数组下标第一位开始,删除两位。
  7. console.log(arr);//[1, 4, 5];
  8. //开始位置是复值的时候
  9. var arr = [1, 2, 3, 4, 5];
  10. arr.splice(-1,1,6,7,8);//[5]
  11. console.log(arr);//[1, 2, 3, 4, 6, 7, 8]
  1. var arr = [1,2,3,4,5];
  2. function splice(arr,index){
  3. return index+= index>=0?0:arr.length;
  4. }
  5. splice(arr,6)

sort排序

  1. 返回排序后的数组、

    1. var arr = [9, 4, 6, 0, 3, -2];
    2. console.log(arr.sort());//[-2,0,3,4,6,9];
    3. var arr =['r','v','g','s','t']
    4. console.log(arr.sort())//["g", "r", "s", "t", "v"]
  2. sort 的排序是根据ASCII码进行排序的。

    1. var arr = [29, 30, 25, 20, 6, 9];
    2. console.log(arr.sort());//[ 20, 25, 29, 30, 6, 9 ]
  3. 自定义排序 arr.sort(function(a,b){});

    1. 解决sort 根据ASCII码来排序。
      1. 必须接收两个参数a,b
      2. 必须有返回值
        1. 返回值的情况
          1. 负值 a排前面。
          2. 正值 b排前面
          3. 0 保持不变。
            1. var arr = [27, 49, 5, 7];
            2. arr.sort(function(a,b){
            3. if(a>b){
            4. return 1
            5. }else{
            6. return -1;
            7. }
            8. })

            作业

            使用splice方法重写unshift 方法。

            ```javascript // 用splice的方法来重写数组原型上的unshift方法; Array.prototype.myUnshift = function(){ console.log(arguments);//是一个伪数组 for (let index = arguments.length-1; index >=0; index—) { this.splice(0,0,arguments[index]);//在第一位删除0位置,然后添加数据。 } return this.length; }

    var a=[1,2,3,4,5]; a.myUnshift(6,7,8,9);

    1. <a name="BLCcE"></a>
    2. ### 按照字节大小来排序下面数组
    3. ```javascript
    4. var a =['哈哈哈','OK','hello','motor'];
    5. function getBytes(str){
    6. var size = str.length;//先赋值为字符串长度,如果遇到UNICODE大于255的就加1
    7. for (let index = 0; index < str.length; index++) {
    8. if(str.charCodeAt(index)>255){
    9. size++;
    10. }
    11. }
    12. return size;
    13. }
    14. console.log( getBytes('哈哈哈'))
    15. a.sort(function(a,b){
    16. //两个参数 a,b 如果返回正值就b在a前面。返回负值就b在a后面。
    17. var x = getBytes(a)-getBytes(b);
    18. return x>0?-1:1
    19. })
    20. //["哈哈哈", "hello", "motor", "OK"] 6 5 5 2