利用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
0
投稿
猜你喜欢
- MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。标准的SQL模式匹
- 欣赏上一篇:用画为5.12地震受灾同胞们祈福 今年我们的祖国多灾多难 雪灾的阴影还没散去又发生了地震。中国插画 * 举办5.12地震祈幅绘画活
- 优化的思路一般是: 第一个是尽量降低向客户端同步对象的数量,第二个是尽量降低单个对象向客户端同步的数据."九宫格"是最常
- <%MaxPerPage=8 ’定义页面最大的记录数为8<br>
- 首先,我们会document里添加mouseover事件时在HTMLElement上飘一个absolute的容器,设置border。接着,m
- 要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似
- 众所周知IE6不支持position:fixed,这个bug与IE6的双倍margin和不支持PNG透明等bug一样臭名昭著。前些天我做自己
- 内容摘要: 首先来讲讲 Session 的好处,它可以用来记录客户端私有的
- PHP PDO连接连接是通过创建 PDO 基类的实例而建立的。不管使用哪种驱动程序,都是用 PDO 类名。连接到 MySQL<?php
- 大概在九九年做游戏网站的时候,就对文章的发布感到麻烦,不过那会儿玩ASP不精。只是将就用着。在遇到长文件 10000 字时网页就是一大片长了
- SQL Server通常都运行在多处理器的服务器上,这一点在现在尤为普遍。原因是多内核的处理器越来越普及。那么,在多处理器环境下,Windo
- 一、模块概述模块指的是包含python代码的文件,也就是一个.py文件就是一个模块。文件夹(directory)---->包(pack
- 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应
- 一、问题描述 SQL Plus WorkSheet是一个窗口图形界面的SQL语句编辑器,对于那些喜欢窗口界面而不喜欢字符界面的用户,该工具相
- 概述做日志分析工作的经常需要跟成千上万的日志条目打交道,为了在庞大的数据量中找到特定模式的数据,常常需要编写很多复杂的正则表达式。例如枚举出
- 今天再为大家提供一种方法:不需要安装Excel也可以导入到我们的SQL Server数据库。首先用SQL Server自身的数据转换功能把E
- 希望这是window.open()打开fullscreen全屏窗口时无提示关闭父窗口的完美解决方案:我们通常都是用控件法,在父窗口文件里放一
- 在使用ASP来进行后端的数据合法性校验的时候,有些人为满足不同环境下面的数据校验,编写了很多的函数来实现,比如,我们想要校验用户输入的URL
- 支持实时监控sliderbar的数据,允许有callback回调的函数,有示例1、可自定样式SetStyle() 2、带有onSroll功能
- 进行访问MySQL数据库的方法有很多种,下面将向大家介绍一些很简单实用的用的方法和示例与大家一起分享。方法一:使用MYSQL推出的MySQL