数组和一些方法

发布于:2022-11-29 ⋅ 阅读:(374) ⋅ 点赞:(0)

数组

var arr1 = [] //数组字面量
var arr2 = new Array() //不推荐
//通过系统内置的Array构造函数声明数组
var arr3 = Array() //不使用
console.log(arr1.proto,arr2.proto,arr3.proto); 都是相同的
所有数组都继承于Array.prototype

我们来和对象进行比较
var obj1 = {} //对象字面量
var obj2 = new Object()
//通过系统内置的Object构造函数声明对象
var obj3 = Object()
console.log(obj1.proto,obj2.proto,obj.proto);都是相同的
所有对象都继承于Object.prototype

在js中 数组底层就是继承对象来实现的

      var arr = [1, 2, 3, 4, 5];
      var obj = {
        0: 1,
        1: 2,
        2: 3,
        3: 4,
        4: 5,
      };
      console.log(arr[2] === obj[2]); //true

稀松数组

数组并不是每一位 都必须有值的 最有一个逗号和没有一样

      var arr = [,,]; //稀松数组
      console.log(arr); // [empty,empty]
      var arr2 = [, 1, 2, , , 3, 4,];
      console.log(arr2); //[empty,1,2,empty,empty,3,4]

但是构造函数创建数组不能有空值 会报错

      var arr1 = new Array(,1, ,2, 3);
      console.log(arr1);

为什么打印数组中不存在的值会放回undefined呢?
因为它和对象一样 所以数组可以想象为特殊的对象
所以数组也可以写入和修改

      var arr = [1, 2, 3, 4, 5];
      console.log(arr[5]); //undefined
      var obj = {
        0: 1,
        1: 2,
        2: 3,
        3: 4,
        4: 5,
      };
      console.log(obj[5]); //undefined

push unshift

数组本身并没有方法 是继承数组原型上的方法
push数组最后添加
unshift数组开头添加
返回值 是执行了方法以后数组的长度
手写push

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

手写unshift
方法一

      Array.prototype.myUnshift = function () {
        var pos = 0;
        for (var i = 0; i < arguments.length; i++) {
          this.splice(pos, 0, arguments[i]);
          pos++;
        }
        return this.length;
      };

方法二

      Array.prototype.myUnshift = function () {
        var argArr = Array.prototype.slice.call(arguments); //类数组转化为数组
        var newArr = argArr.concat(this);
        return newArr;
      };

pop shift

pop剪切数组最后一位
shift剪切数组第一位
返回值 剪切的那个值

reverse

数组倒叙

splice

第一位 开始项的下标 可以位负值 -1开始表示最后一位
第二位 剪切的长度 如果为0 则在这里表示添加
第三位 (如果有) 剪切后 最后一位开始添加数据

      var arr = ['a', 'b', 'c'];
      // arr.splice(1, 2);
      // console.log(arr); //['a']
      // arr.splice(1, 1);
      // console.log(arr);//['a', 'c']
      arr.splice(1, 2, 1, 2, 3);
      console.log(arr); //['a',1,2,3]

在第三位添加d

      var arr = ['a', 'b', 'c', 'e'];
      arr.splice(3, 0, 'd');
      //arr.splice(-1, 0, 'd') 方法二
      console.log(arr);// ['a','b','c','d','e']

sort

默认升序排列
返回值 排序后的结果
arr.sort() 永远按照ascii码来排序
所以当是两位时是无法正确排序的

      var arr = [27, 49, 5, 7];
      arr.sort();
      console.log(arr); // [27, 49, 5, 7]

sort里可以传入一个函数
1.参数a,b
2.返回值
2.1 负值 a就排前面
2.2 正值 b就排前面
2.3 0 保持不动
sort(function(a,b){

})
sort((a,b) => a - b) 升序
sort((a,b) => b - a) 降序

随机排序

      var arr = [1, 2, 3, 4, 5];
      arr.sort(function (a, b) {
        // var rand = Math.random();
        // if(rand - 0.5 > 0){
        // 	return 1
        // }else{
        // 	return -1
        // }
        return Math.random() - 0.5;
      });
      console.log(arr);

其他

按照年龄升序排序对象

      var arr = [
        {
          son: 'Jenny',
          age: 18,
        },
        {
          son: 'Jone',
          age: 10,
        },
        {
          son: 'Crytal',
          age: 13,
        },
      ];
      arr.sort(function (a, b) {
        if (a.age > b.age) {
          return 1;
        } else {
          return -1;
        }
      });

修改原数组
splice pop push shift unshift reverse sort


网站公告

今日签到

点亮在社区的每一天
去签到