利用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 相关文章推荐
JQuery 表格操作(交替显示、拖动表格行、选择行等)
Jul 29 Javascript
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
Mootools 1.2教程 Tooltips
Sep 15 Javascript
学习ExtJS Panel常用方法
Oct 07 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
jQuery.prop() 使用详解
Jul 19 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
详解Angular2响应式表单
Jun 14 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
Sep 17 Javascript
Vue的自定义组件不能使用click方法的解决
Jul 28 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的curl封装类用法实例
2014/11/07 PHP
用Juery网页选项卡实现代码
2011/06/13 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
javascript实现密码验证
2015/11/10 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
vue文件运行的方法教学
2019/02/12 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
Python中处理时间的几种方法小结
2015/04/09 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
python中set()函数简介及实例解析
2018/01/09 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
轻化专业学生实习自我鉴定
2013/09/20 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
大学生党员承诺书
2014/05/20 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
golang内置函数len的小技巧
2021/07/25 Golang
JS class语法糖的深入剖析
2022/07/07 Javascript