sort方法原理、深浅拷贝、async,await异常捕获

sort方法原理

Array.prototype.sortTest = function (arguments) {
            let fn = arguments ? typeof arguments === "function" && arguments : (x, y) => x - y;
            for (var i = 0; i < this.length; i++) {
                for (var j = i + 1; j < this.length; j++) {
                    if (fn(this[i], this[j]) > 0) {
                        p = this[i];
                        this[i] = this[j];
                        this[j] = p;
                    };
                };
            };
            return this;
        }

        var add = (x, y) => x - y;
        var des = (x, y) => y - x;
        var arr = [10, 44, 5, 78, 1, 99];
        var arr1 = [10, 44, 5, 78, 1, 99];
        var arr2 = [10, 44, 5, 78, 1, 99];
        var arr3 = [10, 44, 5, 78, 1, 99];
        // console.log(arr.sortTest(add));//[1, 5, 10, 44, 78, 99]
        // console.log(arr1.sort(add));//[1, 5, 10, 44, 78, 99]
        // console.log(arr2.sortTest(des));//[99, 78, 44, 10, 5, 1]
        // console.log(arr3.sort(des));//[99, 78, 44, 10, 5, 1]

深浅拷贝

// 浅拷贝一
        function shallowCloneCopy(target) {
            if (typeof target === 'object' && target !== null) {
                const cloneTarget = Array.isArray(target) ? [] : {}
                for (let prop in target) {
                    if (target.hasOwnProperty(prop)) {
                        // cloneTarget[prop] = shallowClone(target[prop]) 深拷贝
                        cloneTarget[prop] = target[prop]

                    }
                }
                return cloneTarget
            } else {
                return target
            }
        }

        // 深拷贝二
        function shallowClone(target) {
            if (typeof target === 'object' && target !== null) {

                return JSON.parse(JSON.stringify(target))
            } else {
                return target
            }
        }

        const shallowCloneObj = shallowClone(obj1)

        console.log(shallowCloneObj === obj1)  // false,返回的是一个新对象
        console.log(shallowCloneObj.arry === obj1.arry)

        // 深拷贝第三种
        function clone(obj, hash = new WeakMap()) {
            // 判断是否为 null 或者 typeof 返回类型是否为 object
            if (obj == null || typeof obj !== "object") return obj;
            else if (obj instanceof Date) return new Date(obj);
            else if (obj instanceof RegExp) return new RegExp(obj);

            // 判断集合是否有这个属性,有则直接 return obj
            if (hash.has(obj)) return hash.get(obj)
            const newObj = new obj.constructor();

            // 将属性和拷贝后的值作为一个map
            hash.set(obj, newObj);

            // 遍历 obj
            for (let key in Object.getOwnPropertyDescriptors(obj)) {
                // 过滤掉原型身上的属性
                if (obj.hasOwnProperty(key)) {
                    // 递归拷贝
                    newObj[key] = clone(obj[key], hash);
                }

            }
            return newObj;
        }

async,await异常捕获

// 捕获async await异常
async function asyncAwaitError(fn) {
  try {
    let resp = await fn;
    return [null, resp];
  } catch (err) {
    return [err, null];
  }
}


//使用
async getList5() {
			let [err, res] = await this.asyncAwaitError(this.httpTest());
			console.log('res===>', res);
            console.log('err===>', err);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值