利用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 相关文章推荐
语义化 H1 标签
Jan 14 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
Apr 27 Javascript
jQuery之字体大小的设置方法
Feb 27 Javascript
JavaScript实现的多个图片广告交替显示效果代码
Sep 04 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
Mar 09 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
关于vue中的ajax请求和axios包问题
Apr 19 Javascript
vue计算属性+vue中class与style绑定(推荐)
Mar 30 Javascript
vue实现div单选多选功能
Jul 16 Javascript
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
ES6的循环与可迭代对象示例详解
Jan 31 Javascript
利用 JavaScript 构建命令行应用
Nov 17 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
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
简单谈谈favicon
2015/06/10 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
用js遍历 table的脚本
2008/07/23 Javascript
Firefox div高度自适应
2009/04/28 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
Python translator使用实例
2008/09/06 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
Python实现自动装机功能案例分析
2020/10/22 Python
全球最大的游戏市场:G2A
2018/07/05 全球购物
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
值传递还是引用传递
2015/02/08 面试题
初一地理教学反思
2014/01/16 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
优秀高中学生评语
2014/12/30 职场文书