利用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 汉字字节判断
Aug 01 Javascript
jquery中对表单的基本操作代码
Jul 29 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
jQuery中change事件用法实例
Dec 26 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
May 09 Javascript
Node.js中npm常用命令大全
Jun 09 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
jquery轮播的实现方式 附完整实例
Jul 28 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
Aug 17 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 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程序效率优化的一些策略小结
2010/07/17 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
Javascript 类型转换方法
2010/10/24 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
Anaconda入门使用总结
2018/04/05 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
Django中create和save方法的不同
2019/08/13 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Python解析多帧dicom数据详解
2020/01/13 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
python操作toml文件的示例代码
2020/11/27 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
T3官网:头发造型工具
2019/12/26 全球购物
.net面试题
2016/09/17 面试题
什么是GWT的Entry Point
2013/08/16 面试题
个性大学生自我评价
2013/12/04 职场文书
初中班主任评语
2014/04/24 职场文书
土建技术员岗位职责
2015/04/11 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS