javascript - js对象的hasOwnProperty为什么比数组的indexof方法在性能上高的多?

查看:159
本文介绍了javascript - js对象的hasOwnProperty为什么比数组的indexof方法在性能上高的多?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题,简单的数组去重:

Array.prototype.delRepeat1 = function () {
        var n = []; //一个新的临时数组
        for (var i = 0; i < this.length; i++) //遍历当前数组
        {
            //如果当前数组的第i在临时数组已有,跳过,否则把当前项push到临时数组里
            if (n.indexOf(this[i]) == -1) n.push(this[i]);
        }
        return n;
    }
    
Array.prototype.delRepeat2 = function () {
        var temp = {}, len = this.length;
        for (var i = 0; i < len; i++) {
            var tmp = this[i];
            if (!temp.hasOwnProperty(tmp)) {//hasOwnProperty用来判断一个对象是否有你给出名称的属性或对象
                temp[this[i]] = "yes";
            }
        }
 
        len = 0;
        var tempArr = [];
        for (var i in temp) {
            tempArr[len++] = i;
        }
        return tempArr;
    }
    
    

经测试方法二比方法一的性能高出近百倍?对象遍历key值为何与数组遍历元素差别如此巨大?

解决方案

indexOf对数组中的每一个元素偏离查询,数组长度越长,需要检查的长度就越长,时间就越久
hasOwnProperty对对个一个对象的非继承属性的的检查,数组的下标值就是数组对象的属性,一个对象的属性值及对应的值存储为一个hash数据结构

通过hash查找一个值的速度快于对一个线性数组的查找~~~~

这篇关于javascript - js对象的hasOwnProperty为什么比数组的indexof方法在性能上高的多?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆