利用hasOwnProperty给数组去重的面试题分享
作者:胡斐 发布时间:2023-08-06 20:48:37
标签:hasownproperty,数组,去重
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);
}
来源:https://segmentfault.com/a/1190000016909382


猜你喜欢
- 下表列出了 Microsoft ACCESS 的命令行选项:选项 效果database 打开指定的 Microsoft Access 数据库
- 前言最近公司为客户重新部署了一套新环境,由我来完成了基础环境的配置,配置过程中总结了一些经验,分享给各位园友使用 curl 命令检查网络拿到
- 抽象工厂模式(Abstract Factory Pattern):属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负
- 编号标准宗地编码(landCode)所在区段编码(sectCode)1131001BG001G0012131001BG002G0013131
- 前言小白白跑去鹅厂面试,面试官提出了一个很实际的问题: mysql增加索引,那些情况会失效呢?谈一下实际工作中遇到的情况。我们的
- 实验环境:windows 7,anaconda 3(python 3.5),tensorflow(gpu/cpu)函数介绍:所用函数为six
- 如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话我们是不希望看到如下情况的。我们可以把varchar转换
- If...Then...Else 语句的一种变形,即添加任意多个 ElseIf 子句以扩充 If...Then...Else 语句的功能,允
- 本文实例讲述了Python开发SQLite3数据库相关操作。分享给大家供大家参考,具体如下:'''SQLite数据库
- 一、Cookie原理HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制Cookie是http消息头中的一种属性,
- 本文深入分析了Symfony控制层。分享给大家供大家参考,具体如下:Symfony中控制层包含了连接业务逻辑与表现的代码,控制层为不同的使用
- 本文实例为大家分享了js选项卡切换效果的具体实现代码,供大家参考,具体内容如下<!DOCTYPE html><html&g
- 前言本文使用 cpu 版本的 TensorFlow 2.4 ,分别搭建单层 Bi-LSTM 模型和多层 Bi-LSTM 模型完成文本分类任务
- mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里是否有很耗费资源的sql语句,这是一个有用的日志。它对于性能的影响不大
- 下半年毕业季,各种毕业设计纷涌而至,虽然学校教了Python,但是我相信各位肯定没有认真学,做作业就懵逼的那种~所以我都给大家准备好了!各种
- skimage包的exposure模块图像亮度与对比度的调整,是放在skimage包的exposure模块里面1、gamma调整对原图像的像
- $array=explode(separator,$string); $string=implode(glue,$array);使用和理解这
- 开发环境开发环境为:Win 10(64位)Python 3.7.0Django 2.1安装Pythonpython的安装为比较简单,首先找到
- 前言本文主要给大家介绍了关于django配置连接数据库及原生sql语句的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介
- 方案一:利用selenium+phantomjs * 面浏览器的形式访问网站,再获取cookie值:from selenium import