利用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 Firefox与IE 替换节点的方法
Feb 24 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
jQuery网页右侧广告跟随滚动代码分享
Apr 20 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 Javascript
轻松掌握JavaScript享元模式
Aug 27 Javascript
js实现九宫格拼图小游戏
Feb 13 Javascript
Vue数据双向绑定原理及简单实现方法
May 18 Javascript
webpack的pitching loader详解
Sep 23 Javascript
Vue3为什么这么快
Sep 23 Javascript
Vue3.0的优化总结
Oct 16 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 empty()与isset()区别的详细介绍
2013/06/17 PHP
Laravel日志用法详解
2016/10/09 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
百联网上商城:i百联
2017/01/28 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
大课间活动制度
2014/01/18 职场文书
一年级学生期末评语
2014/04/21 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
总经理司机岗位职责
2015/04/10 职场文书
初中重阳节活动总结
2015/05/05 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
Python jiaba库的使用详解
2021/11/23 Python
Python利用FlashText算法实现替换字符串
2022/03/31 Python