利用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 纠正 cleanWhitespace函数
Mar 11 Javascript
JavaScript包装对象使用介绍
Aug 29 Javascript
再JavaScript的jQuery库中编写动画效果的指南
Aug 13 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
动态加载js文件简单示例
Apr 21 Javascript
jq给页面添加覆盖层遮罩的实例
Feb 16 Javascript
angularJs中datatable实现代码
Jun 03 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
Jul 07 Javascript
Validform验证时可以为空否则按照指定格式验证
Oct 20 Javascript
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
详解es6超好用的语法糖Decorator
Aug 01 Javascript
vue-cli中安装方法(图文详细步骤)
Dec 12 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中使用数组指针函数操作数组示例
2014/11/19 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
php实现的二分查找算法示例
2017/06/20 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
详解Python3的TFTP文件传输
2018/06/26 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
python实现的发邮件功能示例
2019/09/11 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Python 操作 MySQL数据库
2020/09/18 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
python opencv实现图像配准与比较
2021/02/09 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
物理系毕业生自荐信
2013/11/01 职场文书
《老王》教学反思
2014/02/23 职场文书
感谢信的格式
2015/01/21 职场文书
大学军训决心书
2015/02/05 职场文书
物业保安辞职信
2015/05/12 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
python实现过滤敏感词
2021/05/08 Python