JS学习-数组

// sort 
    // 默认按asc码从小到大排列,可以往sort()里传函数
    // 要求:1.必须写两个形参
    // 2.看返回值 1) 当返回值为负数,那么前面的数放在前面 2) 返回值为正数,后面的数放在前面
    // 3)为0 不动
    // 比较顺序遵循冒泡排序
    var arr = [2,20,10,13,48,14,6];
    arr.sort(function (a,b) {
        // return a - b; 升序
        // return b - a; 降序
        return a - b;
    })
// 给一个有序的数组,乱序
    var arr = [1,2,3,4,5,6,7,8];
    arr.sort(function () {
        return Math.random() - 0.5
    })
// slice 一个参数 从该位开始截取,直到最后
    // 两个参数 从该位开始截取,截取到该位
    // 不写 会整个截取 >> 可以把伪数组 转成真数组 空截
    var arr = [1,2,3,4,5,6,7,8];
    var newArr = arr.slice(1,3) // [2,3]
    var newArr = arr.slice(1) // [2, 3, 4, 5, 6, 7, 8]
    var newArr = arr.slice();
// join方法返回字符串
    var str = arr.join("-")  
    // split返回数组
    var sst = str.split("-")
    // 原始值放到栈内存存储 字符串的连接是通过栈去连接
    // 数组是散列结构 用来连接字符串效率更高
//数组去重
var arr = [1,2,3,3,"a",5,4,12,"a",5];
    var s = [];
    for (const key in arr) {
        if (s.includes(arr[key]) == false) {
            s.push(arr[key])
        }
    }
    for (const key in arr) {
        if (s.indexOf(arr[key]) == -1) {
            s.push(arr[key])
        }
    }
    console.log(s)

类数组

// 类数组属性要为索引(数字)属性,必须有length属性,最好加上push,加上splice会变成数组形式
// 好处 同时具有对象和数组的优点
    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) //Object(4) [empty × 2, "c", "d", push: ƒ, splice: ƒ]
    // push是往最后一位,length上推一个数
    // push的原理
    // Array.prototype.push = function (target) {
    //     obj[obj.length] = target;
    //     obj.length ++;
    // }

数组filter()、forEach()、map()、some()、every(),reduce()、reduceRight()

重写typeof方法 去判断各种准确类型

// 重写type  工具方法
    function type(target) {
        // 分两类 原始值 引用值
        // 区分引用值
        var template = {
            '[object Array]' : "array",
            '[object Object]' : "Object",
            '[object Number]' : "number - object",
            '[object Boolean]' : "boolean - object",
            '[object String]' : "String - object",
        }
        if (target == null) {
            return 'null';
        }
        if(typeof(target) == 'object'){
            // 数组 对象 包装类
            var str = Object.prototype.toString.call(target);
            return template[str]
        }else{
            return typeof target;
        }
    }

数组去重

 // 数组去重

    var arr = [1,2,1,1,null,undefined,1,2,1,undefined,null,3,1,2]
    Array.prototype.unique = function () {
        var temp = []
        for (const key in this) {
            if (this.hasOwnProperty(key)) {
                if (temp.indexOf(this[key]) == -1) {
                    temp.push(this[key])
                }
            }
        }
        return temp;
    }
    var arr1 = arr.unique();

    var arr1 = Array.from(new Set(arr));
    console.log(arr1)

JavaScript数组去重(12种方法,史上最全)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值