利用hasOwnProperty给数组去重的面试题分享
hasOwnProperty
hasOwnProperty是javascript中用于检测对象是否包含某个属性的方法,返回一个布尔值。
varo={a:1}; console.log(o.hasOwnProperty('a'));//true console.log(o.hasOwnProperty('b'));//false
有一个用hasOwnProperty实现数组去重的方法:
vararr=['a','b','c','b']; functionuniqueArr(arr){ varunique=[],temp={}; for(vari=0;i但是,如果数组中包含引用类型的指,则此方法失效。那么该如何判断两个对象是否相等呢?
我们假设,如果两个对象具有相同的keys,并且每个key对应的value也都相等,则这两个对象相等。
现在我们已经明确了判断规则,那么该如何实现呢?
varo1={a:1,b:2}, o2={b:2,a:1}, o3={a:2,b:1}; functionisEqual(o1,o2){ varo1_keys=Object.keys(o1); varo2_keys=Object.keys(o1); if(o1_keys.length!==o2_keys.length){ returnfalse; } o1_keys=o1_keys.sort(); o2_keys=o2_keys.sort(); if(o1_keys.join('||')!==o2_keys.join('||')){ returnfalse; } varr=true; for(varkeyofo1_keys){ if(!isPrimitive(o1[key])&&!isPrimitive(o2[key])){ if(!isEqual(o1[key],o2[key])){ r=false; break; } }elseif(o1[key]!==o2[key]){ r=false; break; } } returnr; functionisPrimitive(v){ vartype=typeofv; returntype==='number'||type==='string'||type==='boolean'||v===undefined||v===null; } } console.log(isEqual(o1,o2)); console.log(isEqual(o1,o3)); console.log(isEqual({a:1,b:{c:1}},{b:{c:2},a:1})); console.log(isEqual({a:1,b:{c:1}},{b:{c:1},a:1})); console.log(isEqual({a:1,b:{c:1},c:2},{b:{c:1},a:1})); console.log(isEqual({a:1,b:{c:1}},{b:{c:1},a:{b:1}})); console.log(isEqual({a:1,b:function(){}},{b:function(){},a:1}));上面的代码,我们基本上实现了判断两个对象是否相等,but!!!,还有一点,就是如果对象是函数,怎么判断是否相等?简单一点:Object.toString。
varf1=function(){}; varf2=function(){}; if(f1.toString()===f2.toString()){ console.log(true); }总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。