利用hasOwnProperty给数组去重的面试题分享


Posted in Javascript onNovember 05, 2018

hasOwnProperty

hasOwnProperty是javascript中用于检测对象是否包含某个属性的方法,返回一个布尔值。

var o = { a: 1};
console.log(o.hasOwnProperty('a')); // true
console.log(o.hasOwnProperty('b')); // false

有一个用hasOwnProperty实现数组去重的方法:

var arr = ['a', 'b', 'c', 'b'];

function uniqueArr(arr){

 var unique = [], temp = {};

 for(var i = 0; i < arr.length; i++){
  if(temp[arr[i]] === undefined){
   temp[arr[i]] = 1;
   unique.push(arr[i]);
  }
 }

 return unique;
}

但是,如果数组中包含引用类型的指,则此方法失效。 那么该如何判断两个对象是否相等呢?

我们假设,如果两个对象具有相同的keys,并且每个key对应的value也都相等,则这两个对象相等。

现在我们已经明确了判断规则,那么该如何实现呢?

var o1 = {a:1, b:2},
 o2 = {b:2, a:1},
 o3 = {a:2, b:1};

function isEqual(o1, o2){

 var o1_keys = Object.keys(o1);
 var o2_keys = Object.keys(o1);

 if(o1_keys.length !== o2_keys.length){
  return false;
 }

 o1_keys = o1_keys.sort();
 o2_keys = o2_keys.sort();
 if(o1_keys.join('||') !== o2_keys.join('||')){
  return false;
 }

 var r = true;
 for(var key of o1_keys){
  
  if( !isPrimitive(o1[key] ) && !isPrimitive( o2[key])){
   if(!isEqual(o1[key], o2[key])){
   r = false;
   break;
   }
  } else if(o1[key] !== o2[key]){
   r = false;
   break;
  } 
 }

 return r;


 function isPrimitive(v){
  var type = typeof v;
  return type === '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。

var f1 = function(){};
var f2 = function(){};

if(f1.toString() === f2.toString()){
 console.log(true);
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript window.opener的用法分析
Apr 07 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 Javascript
基于jQuery的倒计时实现代码
May 30 Javascript
浅析js封装和作用域
Jul 09 Javascript
jQuery封装的获取Url中的Get参数示例
Nov 26 Javascript
JQuery中的事件及动画用法实例
Jan 26 Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
简单理解JavaScript中的封装与继承特性
Mar 19 Javascript
JS实现的幻灯片切换显示效果
Sep 07 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
微信小程序实现底部导航
Nov 05 #Javascript
对 Vue-Router 进行单元测试的方法
Nov 05 #Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 #Javascript
微信小程序http连接访问解决方案的示例
Nov 05 #Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
Nov 05 #Javascript
浅谈Vue数据响应
Nov 05 #Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
Nov 05 #Javascript
You might like
php的memcached客户端memcached
2011/06/14 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
php文件上传类的分享
2017/07/06 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
对python pandas 画移动平均线的方法详解
2018/11/28 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
个人简历自荐信
2013/12/05 职场文书
爱国演讲稿400字
2014/05/07 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
音乐课外活动总结
2015/05/09 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
学校财务管理制度
2015/08/04 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书