前端基础——数组的方法(二)

判断是否是数组的方法

  • Object.prototype.toString.call(arr);
  • arr instanceof Array;
  • arr.constructor === Array;
  • Array.isArray(arr);
	var arr = [1, 3];
    var obj = {};
    console.log(Object.prototype.toString.call(arr));
    console.log(arr instanceof Array);
    console.log(arr.constructor === Array);
    console.log(Array.isArray(arr));

    console.log(Object.prototype.toString.call(obj));
    console.log(obj instanceof Array);
    console.log(obj.constructor === Array);
    console.log(Array.isArray(obj));

数组去重

测试:

    let arr = [1, 3, 5, 2, 3, 7, 6, 9, 2];
    console.time('dedup');
    let dedupArr = arr.dedup();
    console.log(dedupArr);
    console.timeEnd('dedup');

第一种方法:

    Array.prototype.dedup = function () {
      return [...new Set(this)]
    }

第二种方法:

    Array.prototype.dedup = function () {
      let arr = [];
      let obj = {};
      this.forEach(item => {
        if (!obj[item]) {
          arr.push(item);
          obj[item] = 1;
        }
      })
      return arr;
    }

第三种方法

    Array.prototype.dedup = function () {
      let arr = [];
      this.forEach(item => {
        if (arr.indexOf(item) === -1) {
          arr.push(item);
        }
      })
      return arr;
    }

第四种方法

    Array.prototype.dedup = function () {
      let arr = [];
      this.forEach((item, index) => {
        if (this.indexOf(item) === index) {
          arr.push(item);
        }
      })
      return arr;
    }

由于数组写的比较简单,所以用时差不多。

数组随机排序

一个1 - 10 的数组随机排序

new Array(10).fill(1).map((item, index) => index + 1).sort(() => Math.random() < .5 ? 1 : -1)

数组的深复制(深拷贝)

第一种方法:扩展运算符

    var arr = [2, 6, 9, 12];
    var arr1 = [];
    [...arr1] = arr;
    arr1[1] = 5;
    console.log(arr, arr1);

在这里插入图片描述

第二种方法: slice()

    var arr = [2, 6, 9, 12];
    var arr1 = arr.slice();
    arr1[1] = 5;
    console.log(arr, arr1);

第三种方法: concat()

    var arr = [2, 6, 9, 12];
    var arr1 = arr.concat();
    arr1[1] = 5;
    console.log(arr, arr1);

第四种方法: map()

    var arr = [2, 6, 9, 12];
    var arr1 = arr.map(item => item);
    arr1[1] = 5;
    console.log(arr, arr1);

第五种方法: filter()

    var arr = [2, 6, 9, 12];
    var arr1 = arr.filter(() => true);
    arr1[1] = 5;
    console.log(arr, arr1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值